From c2bb30f0876a31aeeafabbaf6f3e7682a6a1f997 Mon Sep 17 00:00:00 2001 From: Felipe Benevides Date: Mon, 12 Jun 2023 13:42:12 +0200 Subject: [PATCH] Move @types to devDependencies (#729) * Move @types to devDependencies * Update @types/node * Update module to es6 * Bump to version 8.1.0 * Bump package-lock --------- Co-authored-by: Pusher CI --- CHANGELOG.md | 5 + dist/node/pusher.js | 2358 +++++++--------- dist/node/pusher.js.map | 2 +- dist/react-native/pusher.js | 4 +- dist/react-native/pusher.js.map | 2 +- dist/web/pusher-with-encryption.js | 2436 +++++++---------- dist/web/pusher-with-encryption.js.map | 2 +- dist/web/pusher-with-encryption.min.js | 4 +- dist/web/pusher-with-encryption.min.js.map | 2 +- dist/web/pusher.js | 2403 +++++++--------- dist/web/pusher.js.map | 2 +- dist/web/pusher.min.js | 4 +- dist/web/pusher.min.js.map | 2 +- dist/worker/pusher-with-encryption.worker.js | 2357 +++++++--------- .../pusher-with-encryption.worker.js.map | 2 +- .../pusher-with-encryption.worker.min.js | 4 +- .../pusher-with-encryption.worker.min.js.map | 2 +- dist/worker/pusher.worker.js | 2324 +++++++--------- dist/worker/pusher.worker.js.map | 2 +- dist/worker/pusher.worker.min.js | 4 +- dist/worker/pusher.worker.min.js.map | 2 +- package-lock.json | 52 +- package.json | 12 +- tsconfig.json | 2 +- types/src/core/auth/options.d.ts | 6 +- types/src/core/config.d.ts | 4 +- .../core/strategies/transport_strategy.d.ts | 3 - types/src/core/utils/timers/scheduling.d.ts | 2 +- 28 files changed, 4960 insertions(+), 7044 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 393c98e6f..aa597d63e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 8.1.0 + +- [CHANGED] Move @types dependencies to devDependencies +- [CHANGED] Upgrade typescript to 5.1.3 + ## 8.0.2 - [CHANGED] Fix React Native support. diff --git a/dist/node/pusher.js b/dist/node/pusher.js index ace10340c..540df1ff6 100644 --- a/dist/node/pusher.js +++ b/dist/node/pusher.js @@ -1,5 +1,5 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher @@ -7189,6 +7189,9 @@ module.exports = require("https"); // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); +// EXPORTS +__webpack_require__.d(__webpack_exports__, "default", function() { return /* binding */ pusher_with_encryption_PusherWithEncryption; }); + // CONCATENATED MODULE: ./src/core/base64.ts function encode(s) { return btoa(utob(s)); @@ -7231,43 +7234,28 @@ var btoa = global.btoa || }; // CONCATENATED MODULE: ./src/core/utils/timers/abstract_timer.ts -var Timer = (function () { - function Timer(set, clear, delay, callback) { - var _this = this; +class Timer { + constructor(set, clear, delay, callback) { this.clear = clear; - this.timer = set(function () { - if (_this.timer) { - _this.timer = callback(_this.timer); + this.timer = set(() => { + if (this.timer) { + this.timer = callback(this.timer); } }, delay); } - Timer.prototype.isRunning = function () { + isRunning() { return this.timer !== null; - }; - Timer.prototype.ensureAborted = function () { + } + ensureAborted() { if (this.timer) { this.clear(this.timer); this.timer = null; } - }; - return Timer; -}()); + } +} /* harmony default export */ var abstract_timer = (Timer); // CONCATENATED MODULE: ./src/core/utils/timers/index.ts -var __extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); function timers_clearTimeout(timer) { global.clearTimeout(timer); @@ -7275,33 +7263,27 @@ function timers_clearTimeout(timer) { function timers_clearInterval(timer) { global.clearInterval(timer); } -var OneOffTimer = (function (_super) { - __extends(OneOffTimer, _super); - function OneOffTimer(delay, callback) { - return _super.call(this, setTimeout, timers_clearTimeout, delay, function (timer) { +class timers_OneOffTimer extends abstract_timer { + constructor(delay, callback) { + super(setTimeout, timers_clearTimeout, delay, function (timer) { callback(); return null; - }) || this; + }); } - return OneOffTimer; -}(abstract_timer)); - -var PeriodicTimer = (function (_super) { - __extends(PeriodicTimer, _super); - function PeriodicTimer(delay, callback) { - return _super.call(this, setInterval, timers_clearInterval, delay, function (timer) { +} +class timers_PeriodicTimer extends abstract_timer { + constructor(delay, callback) { + super(setInterval, timers_clearInterval, delay, function (timer) { callback(); return timer; - }) || this; + }); } - return PeriodicTimer; -}(abstract_timer)); - +} // CONCATENATED MODULE: ./src/core/util.ts var Util = { - now: function () { + now() { if (Date.now) { return Date.now(); } @@ -7309,14 +7291,10 @@ var Util = { return new Date().valueOf(); } }, - defer: function (callback) { - return new OneOffTimer(0, callback); + defer(callback) { + return new timers_OneOffTimer(0, callback); }, - method: function (name) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + method(name, ...args) { var boundArguments = Array.prototype.slice.call(arguments, 1); return function (object) { return object[name].apply(object, boundArguments.concat(arguments)); @@ -7328,11 +7306,7 @@ var Util = { // CONCATENATED MODULE: ./src/core/utils/collections.ts -function extend(target) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } +function extend(target, ...sources) { for (var i = 0; i < sources.length; i++) { var extensions = sources[i]; for (var property in extensions) { @@ -7525,7 +7499,7 @@ function safeJSONStringify(source) { // CONCATENATED MODULE: ./src/core/defaults.ts var Defaults = { - VERSION: "8.0.2", + VERSION: "8.1.0", PROTOCOL: 7, wsPort: 80, wssPort: 443, @@ -7594,14 +7568,14 @@ var sockjs = { // CONCATENATED MODULE: ./src/core/events/callback_registry.ts -var callback_registry_CallbackRegistry = (function () { - function CallbackRegistry() { +class callback_registry_CallbackRegistry { + constructor() { this._callbacks = {}; } - CallbackRegistry.prototype.get = function (name) { + get(name) { return this._callbacks[prefix(name)]; - }; - CallbackRegistry.prototype.add = function (name, callback, context) { + } + add(name, callback, context) { var prefixedEventName = prefix(name); this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || []; @@ -7609,8 +7583,8 @@ var callback_registry_CallbackRegistry = (function () { fn: callback, context: context }); - }; - CallbackRegistry.prototype.remove = function (name, callback, context) { + } + remove(name, callback, context) { if (!name && !callback && !context) { this._callbacks = {}; return; @@ -7622,8 +7596,8 @@ var callback_registry_CallbackRegistry = (function () { else { this.removeAllCallbacks(names); } - }; - CallbackRegistry.prototype.removeCallback = function (names, callback, context) { + } + removeCallback(names, callback, context) { apply(names, function (name) { this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) { return ((callback && callback !== binding.fn) || @@ -7633,15 +7607,13 @@ var callback_registry_CallbackRegistry = (function () { delete this._callbacks[name]; } }, this); - }; - CallbackRegistry.prototype.removeAllCallbacks = function (names) { + } + removeAllCallbacks(names) { apply(names, function (name) { delete this._callbacks[name]; }, this); - }; - return CallbackRegistry; -}()); -/* harmony default export */ var callback_registry = (callback_registry_CallbackRegistry); + } +} function prefix(name) { return '_' + name; } @@ -7649,38 +7621,38 @@ function prefix(name) { // CONCATENATED MODULE: ./src/core/events/dispatcher.ts -var dispatcher_Dispatcher = (function () { - function Dispatcher(failThrough) { - this.callbacks = new callback_registry(); +class dispatcher_Dispatcher { + constructor(failThrough) { + this.callbacks = new callback_registry_CallbackRegistry(); this.global_callbacks = []; this.failThrough = failThrough; } - Dispatcher.prototype.bind = function (eventName, callback, context) { + bind(eventName, callback, context) { this.callbacks.add(eventName, callback, context); return this; - }; - Dispatcher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_callbacks.push(callback); return this; - }; - Dispatcher.prototype.unbind = function (eventName, callback, context) { + } + unbind(eventName, callback, context) { this.callbacks.remove(eventName, callback, context); return this; - }; - Dispatcher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { if (!callback) { this.global_callbacks = []; return this; } - this.global_callbacks = filter(this.global_callbacks || [], function (c) { return c !== callback; }); + this.global_callbacks = filter(this.global_callbacks || [], c => c !== callback); return this; - }; - Dispatcher.prototype.unbind_all = function () { + } + unbind_all() { this.unbind(); this.unbind_global(); return this; - }; - Dispatcher.prototype.emit = function (eventName, data, metadata) { + } + emit(eventName, data, metadata) { for (var i = 0; i < this.global_callbacks.length; i++) { this.global_callbacks[i](eventName, data); } @@ -7701,120 +7673,85 @@ var dispatcher_Dispatcher = (function () { this.failThrough(eventName, data); } return this; - }; - return Dispatcher; -}()); -/* harmony default export */ var dispatcher = (dispatcher_Dispatcher); + } +} // CONCATENATED MODULE: ./src/core/logger.ts -var logger_Logger = (function () { - function Logger() { - this.globalLog = function (message) { +class logger_Logger { + constructor() { + this.globalLog = (message) => { if (global.console && global.console.log) { global.console.log(message); } }; } - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + debug(...args) { this.log(this.globalLog, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + warn(...args) { this.log(this.globalLogWarn, args); - }; - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + error(...args) { this.log(this.globalLogError, args); - }; - Logger.prototype.globalLogWarn = function (message) { + } + globalLogWarn(message) { if (global.console && global.console.warn) { global.console.warn(message); } else { this.globalLog(message); } - }; - Logger.prototype.globalLogError = function (message) { + } + globalLogError(message) { if (global.console && global.console.error) { global.console.error(message); } else { this.globalLogWarn(message); } - }; - Logger.prototype.log = function (defaultLoggingFunction) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + } + log(defaultLoggingFunction, ...args) { var message = stringify.apply(this, arguments); if (core_pusher.log) { core_pusher.log(message); } else if (core_pusher.logToConsole) { - var log = defaultLoggingFunction.bind(this); + const log = defaultLoggingFunction.bind(this); log(message); } - }; - return Logger; -}()); + } +} /* harmony default export */ var logger = (new logger_Logger()); // CONCATENATED MODULE: ./src/core/transports/transport_connection.ts -var transport_connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var transport_connection_TransportConnection = (function (_super) { - transport_connection_extends(TransportConnection, _super); - function TransportConnection(hooks, name, priority, key, options) { - var _this = _super.call(this) || this; - _this.initialize = node_runtime.transportConnectionInitializer; - _this.hooks = hooks; - _this.name = name; - _this.priority = priority; - _this.key = key; - _this.options = options; - _this.state = 'new'; - _this.timeline = options.timeline; - _this.activityTimeout = options.activityTimeout; - _this.id = _this.timeline.generateUniqueID(); - return _this; +class transport_connection_TransportConnection extends dispatcher_Dispatcher { + constructor(hooks, name, priority, key, options) { + super(); + this.initialize = node_runtime.transportConnectionInitializer; + this.hooks = hooks; + this.name = name; + this.priority = priority; + this.key = key; + this.options = options; + this.state = 'new'; + this.timeline = options.timeline; + this.activityTimeout = options.activityTimeout; + this.id = this.timeline.generateUniqueID(); } - TransportConnection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return Boolean(this.hooks.handlesActivityChecks); - }; - TransportConnection.prototype.supportsPing = function () { + } + supportsPing() { return Boolean(this.hooks.supportsPing); - }; - TransportConnection.prototype.connect = function () { - var _this = this; + } + connect() { if (this.socket || this.state !== 'initialized') { return false; } @@ -7823,18 +7760,18 @@ var transport_connection_TransportConnection = (function (_super) { this.socket = this.hooks.getSocket(url, this.options); } catch (e) { - util.defer(function () { - _this.onError(e); - _this.changeState('closed'); + util.defer(() => { + this.onError(e); + this.changeState('closed'); }); return false; } this.bindListeners(); - logger.debug('Connecting', { transport: this.name, url: url }); + logger.debug('Connecting', { transport: this.name, url }); this.changeState('connecting'); return true; - }; - TransportConnection.prototype.close = function () { + } + close() { if (this.socket) { this.socket.close(); return true; @@ -7842,13 +7779,12 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.send = function (data) { - var _this = this; + } + send(data) { if (this.state === 'open') { - util.defer(function () { - if (_this.socket) { - _this.socket.send(data); + util.defer(() => { + if (this.socket) { + this.socket.send(data); } }); return true; @@ -7856,24 +7792,24 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.ping = function () { + } + ping() { if (this.state === 'open' && this.supportsPing()) { this.socket.ping(); } - }; - TransportConnection.prototype.onOpen = function () { + } + onOpen() { if (this.hooks.beforeOpen) { this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options)); } this.changeState('open'); this.socket.onopen = undefined; - }; - TransportConnection.prototype.onError = function (error) { + } + onError(error) { this.emit('error', { type: 'WebSocketError', error: error }); this.timeline.error(this.buildTimelineMessage({ error: error.toString() })); - }; - TransportConnection.prototype.onClose = function (closeEvent) { + } + onClose(closeEvent) { if (closeEvent) { this.changeState('closed', { code: closeEvent.code, @@ -7886,34 +7822,33 @@ var transport_connection_TransportConnection = (function (_super) { } this.unbindListeners(); this.socket = undefined; - }; - TransportConnection.prototype.onMessage = function (message) { + } + onMessage(message) { this.emit('message', message); - }; - TransportConnection.prototype.onActivity = function () { + } + onActivity() { this.emit('activity'); - }; - TransportConnection.prototype.bindListeners = function () { - var _this = this; - this.socket.onopen = function () { - _this.onOpen(); + } + bindListeners() { + this.socket.onopen = () => { + this.onOpen(); }; - this.socket.onerror = function (error) { - _this.onError(error); + this.socket.onerror = error => { + this.onError(error); }; - this.socket.onclose = function (closeEvent) { - _this.onClose(closeEvent); + this.socket.onclose = closeEvent => { + this.onClose(closeEvent); }; - this.socket.onmessage = function (message) { - _this.onMessage(message); + this.socket.onmessage = message => { + this.onMessage(message); }; if (this.supportsPing()) { - this.socket.onactivity = function () { - _this.onActivity(); + this.socket.onactivity = () => { + this.onActivity(); }; } - }; - TransportConnection.prototype.unbindListeners = function () { + } + unbindListeners() { if (this.socket) { this.socket.onopen = undefined; this.socket.onerror = undefined; @@ -7923,44 +7858,40 @@ var transport_connection_TransportConnection = (function (_super) { this.socket.onactivity = undefined; } } - }; - TransportConnection.prototype.changeState = function (state, params) { + } + changeState(state, params) { this.state = state; this.timeline.info(this.buildTimelineMessage({ state: state, params: params })); this.emit(state, params); - }; - TransportConnection.prototype.buildTimelineMessage = function (message) { + } + buildTimelineMessage(message) { return extend({ cid: this.id }, message); - }; - return TransportConnection; -}(dispatcher)); -/* harmony default export */ var transport_connection = (transport_connection_TransportConnection); + } +} // CONCATENATED MODULE: ./src/core/transports/transport.ts -var transport_Transport = (function () { - function Transport(hooks) { +class transport_Transport { + constructor(hooks) { this.hooks = hooks; } - Transport.prototype.isSupported = function (environment) { + isSupported(environment) { return this.hooks.isSupported(environment); - }; - Transport.prototype.createConnection = function (name, priority, key, options) { - return new transport_connection(this.hooks, name, priority, key, options); - }; - return Transport; -}()); -/* harmony default export */ var transports_transport = (transport_Transport); + } + createConnection(name, priority, key, options) { + return new transport_connection_TransportConnection(this.hooks, name, priority, key, options); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/transports/transports.ts -var WSTransport = new transports_transport({ +var WSTransport = new transport_Transport({ urls: ws, handlesActivityChecks: false, supportsPing: false, @@ -7997,8 +7928,8 @@ var xhrConfiguration = { return node_runtime.isXHRSupported(); } }; -var XHRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xhrConfiguration))); -var XHRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xhrConfiguration)); +var XHRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xhrConfiguration))); +var XHRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xhrConfiguration)); var Transports = { ws: WSTransport, xhr_streaming: XHRStreamingTransport, @@ -8009,16 +7940,15 @@ var Transports = { // CONCATENATED MODULE: ./src/core/transports/assistant_to_the_transport_manager.ts -var assistant_to_the_transport_manager_AssistantToTheTransportManager = (function () { - function AssistantToTheTransportManager(manager, transport, options) { +class assistant_to_the_transport_manager_AssistantToTheTransportManager { + constructor(manager, transport, options) { this.manager = manager; this.transport = transport; this.minPingDelay = options.minPingDelay; this.maxPingDelay = options.maxPingDelay; this.pingDelay = undefined; } - AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) { - var _this = this; + createConnection(name, priority, key, options) { options = extend({}, options, { activityTimeout: this.pingDelay }); @@ -8029,31 +7959,29 @@ var assistant_to_the_transport_manager_AssistantToTheTransportManager = (functio connection.bind('closed', onClosed); openTimestamp = util.now(); }; - var onClosed = function (closeEvent) { + var onClosed = closeEvent => { connection.unbind('closed', onClosed); if (closeEvent.code === 1002 || closeEvent.code === 1003) { - _this.manager.reportDeath(); + this.manager.reportDeath(); } else if (!closeEvent.wasClean && openTimestamp) { var lifespan = util.now() - openTimestamp; - if (lifespan < 2 * _this.maxPingDelay) { - _this.manager.reportDeath(); - _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay); + if (lifespan < 2 * this.maxPingDelay) { + this.manager.reportDeath(); + this.pingDelay = Math.max(lifespan / 2, this.minPingDelay); } } }; connection.bind('open', onOpen); return connection; - }; - AssistantToTheTransportManager.prototype.isSupported = function (environment) { + } + isSupported(environment) { return this.manager.isAlive() && this.transport.isSupported(environment); - }; - return AssistantToTheTransportManager; -}()); -/* harmony default export */ var assistant_to_the_transport_manager = (assistant_to_the_transport_manager_AssistantToTheTransportManager); + } +} // CONCATENATED MODULE: ./src/core/connection/protocol/protocol.ts -var Protocol = { +const Protocol = { decodeMessage: function (messageEvent) { try { var messageData = JSON.parse(messageEvent.data); @@ -8146,68 +8074,52 @@ var Protocol = { /* harmony default export */ var protocol = (Protocol); // CONCATENATED MODULE: ./src/core/connection/connection.ts -var connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_Connection = (function (_super) { - connection_extends(Connection, _super); - function Connection(id, transport) { - var _this = _super.call(this) || this; - _this.id = id; - _this.transport = transport; - _this.activityTimeout = transport.activityTimeout; - _this.bindListeners(); - return _this; +class connection_Connection extends dispatcher_Dispatcher { + constructor(id, transport) { + super(); + this.id = id; + this.transport = transport; + this.activityTimeout = transport.activityTimeout; + this.bindListeners(); } - Connection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return this.transport.handlesActivityChecks(); - }; - Connection.prototype.send = function (data) { + } + send(data) { return this.transport.send(data); - }; - Connection.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { var event = { event: name, data: data }; if (channel) { event.channel = channel; } logger.debug('Event sent', event); return this.send(protocol.encodeMessage(event)); - }; - Connection.prototype.ping = function () { + } + ping() { if (this.transport.supportsPing()) { this.transport.ping(); } else { this.send_event('pusher:ping', {}); } - }; - Connection.prototype.close = function () { + } + close() { this.transport.close(); - }; - Connection.prototype.bindListeners = function () { - var _this = this; + } + bindListeners() { var listeners = { - message: function (messageEvent) { + message: (messageEvent) => { var pusherEvent; try { pusherEvent = protocol.decodeMessage(messageEvent); } catch (e) { - _this.emit('error', { + this.emit('error', { type: 'MessageParseError', error: e, data: messageEvent.data @@ -8217,46 +8129,46 @@ var connection_Connection = (function (_super) { logger.debug('Event recd', pusherEvent); switch (pusherEvent.event) { case 'pusher:error': - _this.emit('error', { + this.emit('error', { type: 'PusherError', data: pusherEvent.data }); break; case 'pusher:ping': - _this.emit('ping'); + this.emit('ping'); break; case 'pusher:pong': - _this.emit('pong'); + this.emit('pong'); break; } - _this.emit('message', pusherEvent); + this.emit('message', pusherEvent); } }, - activity: function () { - _this.emit('activity'); + activity: () => { + this.emit('activity'); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function (closeEvent) { + closed: closeEvent => { unbindListeners(); if (closeEvent && closeEvent.code) { - _this.handleCloseEvent(closeEvent); + this.handleCloseEvent(closeEvent); } - _this.transport = null; - _this.emit('closed'); + this.transport = null; + this.emit('closed'); } }; - var unbindListeners = function () { - objectApply(listeners, function (listener, event) { - _this.transport.unbind(event, listener); + var unbindListeners = () => { + objectApply(listeners, (listener, event) => { + this.transport.unbind(event, listener); }); }; - objectApply(listeners, function (listener, event) { - _this.transport.bind(event, listener); + objectApply(listeners, (listener, event) => { + this.transport.bind(event, listener); }); - }; - Connection.prototype.handleCloseEvent = function (closeEvent) { + } + handleCloseEvent(closeEvent) { var action = protocol.getCloseAction(closeEvent); var error = protocol.getCloseError(closeEvent); if (error) { @@ -8265,203 +8177,138 @@ var connection_Connection = (function (_super) { if (action) { this.emit(action, { action: action, error: error }); } - }; - return Connection; -}(dispatcher)); -/* harmony default export */ var connection_connection = (connection_Connection); + } +} // CONCATENATED MODULE: ./src/core/connection/handshake/index.ts -var handshake_Handshake = (function () { - function Handshake(transport, callback) { +class handshake_Handshake { + constructor(transport, callback) { this.transport = transport; this.callback = callback; this.bindListeners(); } - Handshake.prototype.close = function () { + close() { this.unbindListeners(); this.transport.close(); - }; - Handshake.prototype.bindListeners = function () { - var _this = this; - this.onMessage = function (m) { - _this.unbindListeners(); + } + bindListeners() { + this.onMessage = m => { + this.unbindListeners(); var result; try { result = protocol.processHandshake(m); } catch (e) { - _this.finish('error', { error: e }); - _this.transport.close(); + this.finish('error', { error: e }); + this.transport.close(); return; } if (result.action === 'connected') { - _this.finish('connected', { - connection: new connection_connection(result.id, _this.transport), + this.finish('connected', { + connection: new connection_Connection(result.id, this.transport), activityTimeout: result.activityTimeout }); } else { - _this.finish(result.action, { error: result.error }); - _this.transport.close(); + this.finish(result.action, { error: result.error }); + this.transport.close(); } }; - this.onClosed = function (closeEvent) { - _this.unbindListeners(); + this.onClosed = closeEvent => { + this.unbindListeners(); var action = protocol.getCloseAction(closeEvent) || 'backoff'; var error = protocol.getCloseError(closeEvent); - _this.finish(action, { error: error }); + this.finish(action, { error: error }); }; this.transport.bind('message', this.onMessage); this.transport.bind('closed', this.onClosed); - }; - Handshake.prototype.unbindListeners = function () { + } + unbindListeners() { this.transport.unbind('message', this.onMessage); this.transport.unbind('closed', this.onClosed); - }; - Handshake.prototype.finish = function (action, params) { + } + finish(action, params) { this.callback(extend({ transport: this.transport, action: action }, params)); - }; - return Handshake; -}()); -/* harmony default export */ var connection_handshake = (handshake_Handshake); + } +} // CONCATENATED MODULE: ./src/core/timeline/timeline_sender.ts -var timeline_sender_TimelineSender = (function () { - function TimelineSender(timeline, options) { +class timeline_sender_TimelineSender { + constructor(timeline, options) { this.timeline = timeline; this.options = options || {}; } - TimelineSender.prototype.send = function (useTLS, callback) { + send(useTLS, callback) { if (this.timeline.isEmpty()) { return; } this.timeline.send(node_runtime.TimelineTransport.getAgent(this, useTLS), callback); - }; - return TimelineSender; -}()); -/* harmony default export */ var timeline_sender = (timeline_sender_TimelineSender); + } +} // CONCATENATED MODULE: ./src/core/errors.ts -var errors_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var BadEventName = (function (_super) { - errors_extends(BadEventName, _super); - function BadEventName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadEventName; -}(Error)); - -var BadChannelName = (function (_super) { - errors_extends(BadChannelName, _super); - function BadChannelName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadChannelName; -}(Error)); - -var RequestTimedOut = (function (_super) { - errors_extends(RequestTimedOut, _super); - function RequestTimedOut(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return RequestTimedOut; -}(Error)); - -var TransportPriorityTooLow = (function (_super) { - errors_extends(TransportPriorityTooLow, _super); - function TransportPriorityTooLow(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportPriorityTooLow; -}(Error)); - -var TransportClosed = (function (_super) { - errors_extends(TransportClosed, _super); - function TransportClosed(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportClosed; -}(Error)); - -var UnsupportedFeature = (function (_super) { - errors_extends(UnsupportedFeature, _super); - function UnsupportedFeature(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedFeature; -}(Error)); - -var UnsupportedTransport = (function (_super) { - errors_extends(UnsupportedTransport, _super); - function UnsupportedTransport(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedTransport; -}(Error)); - -var UnsupportedStrategy = (function (_super) { - errors_extends(UnsupportedStrategy, _super); - function UnsupportedStrategy(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedStrategy; -}(Error)); - -var HTTPAuthError = (function (_super) { - errors_extends(HTTPAuthError, _super); - function HTTPAuthError(status, msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - _this.status = status; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return HTTPAuthError; -}(Error)); - +class BadEventName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class BadChannelName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class RequestTimedOut extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportPriorityTooLow extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportClosed extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedFeature extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedTransport extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedStrategy extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class HTTPAuthError extends Error { + constructor(status, msg) { + super(msg); + this.status = status; + Object.setPrototypeOf(this, new.target.prototype); + } +} // CONCATENATED MODULE: ./src/core/utils/url_store.ts -var urlStore = { +const urlStore = { baseUrl: 'https://pusher.com', urls: { authenticationEndpoint: { @@ -8481,12 +8328,12 @@ var urlStore = { } } }; -var buildLogSuffix = function (key) { - var urlPrefix = 'See:'; - var urlObj = urlStore.urls[key]; +const buildLogSuffix = function (key) { + const urlPrefix = 'See:'; + const urlObj = urlStore.urls[key]; if (!urlObj) return ''; - var url; + let url; if (urlObj.fullUrl) { url = urlObj.fullUrl; } @@ -8495,60 +8342,45 @@ var buildLogSuffix = function (key) { } if (!url) return ''; - return urlPrefix + " " + url; + return `${urlPrefix} ${url}`; }; -/* harmony default export */ var url_store = ({ buildLogSuffix: buildLogSuffix }); +/* harmony default export */ var url_store = ({ buildLogSuffix }); // CONCATENATED MODULE: ./src/core/channels/channel.ts -var channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var channel_Channel = (function (_super) { - channel_extends(Channel, _super); - function Channel(name, pusher) { - var _this = _super.call(this, function (event, data) { +class channel_Channel extends dispatcher_Dispatcher { + constructor(name, pusher) { + super(function (event, data) { logger.debug('No callbacks on ' + name + ' for ' + event); - }) || this; - _this.name = name; - _this.pusher = pusher; - _this.subscribed = false; - _this.subscriptionPending = false; - _this.subscriptionCancelled = false; - return _this; - } - Channel.prototype.authorize = function (socketId, callback) { + }); + this.name = name; + this.pusher = pusher; + this.subscribed = false; + this.subscriptionPending = false; + this.subscriptionCancelled = false; + } + authorize(socketId, callback) { return callback(null, { auth: '' }); - }; - Channel.prototype.trigger = function (event, data) { + } + trigger(event, data) { if (event.indexOf('client-') !== 0) { throw new BadEventName("Event '" + event + "' does not start with 'client-'"); } if (!this.subscribed) { var suffix = url_store.buildLogSuffix('triggeringClientEvents'); - logger.warn("Client event triggered before channel 'subscription_succeeded' event . " + suffix); + logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`); } return this.pusher.send_event(event, data, this.name); - }; - Channel.prototype.disconnect = function () { + } + disconnect() { this.subscribed = false; this.subscriptionPending = false; - }; - Channel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName === 'pusher_internal:subscription_succeeded') { @@ -8561,8 +8393,8 @@ var channel_Channel = (function (_super) { var metadata = {}; this.emit(eventName, data, metadata); } - }; - Channel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -8571,91 +8403,69 @@ var channel_Channel = (function (_super) { else { this.emit('pusher:subscription_succeeded', event.data); } - }; - Channel.prototype.handleSubscriptionCountEvent = function (event) { + } + handleSubscriptionCountEvent(event) { if (event.data.subscription_count) { this.subscriptionCount = event.data.subscription_count; } this.emit('pusher:subscription_count', event.data); - }; - Channel.prototype.subscribe = function () { - var _this = this; + } + subscribe() { if (this.subscribed) { return; } this.subscriptionPending = true; this.subscriptionCancelled = false; - this.authorize(this.pusher.connection.socket_id, function (error, data) { + this.authorize(this.pusher.connection.socket_id, (error, data) => { if (error) { - _this.subscriptionPending = false; + this.subscriptionPending = false; logger.error(error.toString()); - _this.emit('pusher:subscription_error', Object.assign({}, { + this.emit('pusher:subscription_error', Object.assign({}, { type: 'AuthError', error: error.message }, error instanceof HTTPAuthError ? { status: error.status } : {})); } else { - _this.pusher.send_event('pusher:subscribe', { + this.pusher.send_event('pusher:subscribe', { auth: data.auth, channel_data: data.channel_data, - channel: _this.name + channel: this.name }); } }); - }; - Channel.prototype.unsubscribe = function () { + } + unsubscribe() { this.subscribed = false; this.pusher.send_event('pusher:unsubscribe', { channel: this.name }); - }; - Channel.prototype.cancelSubscription = function () { + } + cancelSubscription() { this.subscriptionCancelled = true; - }; - Channel.prototype.reinstateSubscription = function () { + } + reinstateSubscription() { this.subscriptionCancelled = false; - }; - return Channel; -}(dispatcher)); -/* harmony default export */ var channels_channel = (channel_Channel); + } +} // CONCATENATED MODULE: ./src/core/channels/private_channel.ts -var private_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var PrivateChannel = (function (_super) { - private_channel_extends(PrivateChannel, _super); - function PrivateChannel() { - return _super !== null && _super.apply(this, arguments) || this; - } - PrivateChannel.prototype.authorize = function (socketId, callback) { +class private_channel_PrivateChannel extends channel_Channel { + authorize(socketId, callback) { return this.pusher.config.channelAuthorizer({ channelName: this.name, socketId: socketId }, callback); - }; - return PrivateChannel; -}(channels_channel)); -/* harmony default export */ var private_channel = (PrivateChannel); + } +} // CONCATENATED MODULE: ./src/core/channels/members.ts -var members_Members = (function () { - function Members() { +class members_Members { + constructor() { this.reset(); } - Members.prototype.get = function (id) { + get(id) { if (Object.prototype.hasOwnProperty.call(this.members, id)) { return { id: id, @@ -8665,60 +8475,44 @@ var members_Members = (function () { else { return null; } - }; - Members.prototype.each = function (callback) { - var _this = this; - objectApply(this.members, function (member, id) { - callback(_this.get(id)); + } + each(callback) { + objectApply(this.members, (member, id) => { + callback(this.get(id)); }); - }; - Members.prototype.setMyID = function (id) { + } + setMyID(id) { this.myID = id; - }; - Members.prototype.onSubscription = function (subscriptionData) { + } + onSubscription(subscriptionData) { this.members = subscriptionData.presence.hash; this.count = subscriptionData.presence.count; this.me = this.get(this.myID); - }; - Members.prototype.addMember = function (memberData) { + } + addMember(memberData) { if (this.get(memberData.user_id) === null) { this.count++; } this.members[memberData.user_id] = memberData.user_info; return this.get(memberData.user_id); - }; - Members.prototype.removeMember = function (memberData) { + } + removeMember(memberData) { var member = this.get(memberData.user_id); if (member) { delete this.members[memberData.user_id]; this.count--; } return member; - }; - Members.prototype.reset = function () { + } + reset() { this.members = {}; this.count = 0; this.myID = null; this.me = null; - }; - return Members; -}()); -/* harmony default export */ var members = (members_Members); + } +} // CONCATENATED MODULE: ./src/core/channels/presence_channel.ts -var presence_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -8728,80 +8522,42 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = (undefined && undefined.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; - - - - -var presence_channel_PresenceChannel = (function (_super) { - presence_channel_extends(PresenceChannel, _super); - function PresenceChannel(name, pusher) { - var _this = _super.call(this, name, pusher) || this; - _this.members = new members(); - return _this; - } - PresenceChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { return __awaiter(_this, void 0, void 0, function () { - var channelData, suffix; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!!error) return [3, 3]; - authData = authData; - if (!(authData.channel_data != null)) return [3, 1]; - channelData = JSON.parse(authData.channel_data); - this.members.setMyID(channelData.user_id); - return [3, 3]; - case 1: return [4, this.pusher.user.signinDonePromise]; - case 2: - _a.sent(); - if (this.pusher.user.user_data != null) { - this.members.setMyID(this.pusher.user.user_data.id); - } - else { - suffix = url_store.buildLogSuffix('authorizationEndpoint'); - logger.error("Invalid auth response for channel '" + this.name + "', " + - ("expected 'channel_data' field. " + suffix + ", ") + - "or the user should be signed in."); - callback('Invalid auth response'); - return [2]; - } - _a.label = 3; - case 3: - callback(error, authData); - return [2]; + + + + +class presence_channel_PresenceChannel extends private_channel_PrivateChannel { + constructor(name, pusher) { + super(name, pusher); + this.members = new members_Members(); + } + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () { + if (!error) { + authData = authData; + if (authData.channel_data != null) { + var channelData = JSON.parse(authData.channel_data); + this.members.setMyID(channelData.user_id); } - }); - }); }); - }; - PresenceChannel.prototype.handleEvent = function (event) { + else { + yield this.pusher.user.signinDonePromise; + if (this.pusher.user.user_data != null) { + this.members.setMyID(this.pusher.user.user_data.id); + } + else { + let suffix = url_store.buildLogSuffix('authorizationEndpoint'); + logger.error(`Invalid auth response for channel '${this.name}', ` + + `expected 'channel_data' field. ${suffix}, ` + + `or the user should be signed in.`); + callback('Invalid auth response'); + return; + } + } + } + callback(error, authData); + })); + } + handleEvent(event) { var eventName = event.event; if (eventName.indexOf('pusher_internal:') === 0) { this.handleInternalEvent(event); @@ -8814,8 +8570,8 @@ var presence_channel_PresenceChannel = (function (_super) { } this.emit(eventName, data, metadata); } - }; - PresenceChannel.prototype.handleInternalEvent = function (event) { + } + handleInternalEvent(event) { var eventName = event.event; var data = event.data; switch (eventName) { @@ -8836,8 +8592,8 @@ var presence_channel_PresenceChannel = (function (_super) { } break; } - }; - PresenceChannel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -8847,14 +8603,12 @@ var presence_channel_PresenceChannel = (function (_super) { this.members.onSubscription(event.data); this.emit('pusher:subscription_succeeded', this.members); } - }; - PresenceChannel.prototype.disconnect = function () { + } + disconnect() { this.members.reset(); - _super.prototype.disconnect.call(this); - }; - return PresenceChannel; -}(private_channel)); -/* harmony default export */ var presence_channel = (presence_channel_PresenceChannel); + super.disconnect(); + } +} // EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js var utf8 = __webpack_require__(17); @@ -8863,64 +8617,47 @@ var utf8 = __webpack_require__(17); var base64 = __webpack_require__(8); // CONCATENATED MODULE: ./src/core/channels/encrypted_channel.ts -var encrypted_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var encrypted_channel_EncryptedChannel = (function (_super) { - encrypted_channel_extends(EncryptedChannel, _super); - function EncryptedChannel(name, pusher, nacl) { - var _this = _super.call(this, name, pusher) || this; - _this.key = null; - _this.nacl = nacl; - return _this; +class encrypted_channel_EncryptedChannel extends private_channel_PrivateChannel { + constructor(name, pusher, nacl) { + super(name, pusher); + this.key = null; + this.nacl = nacl; } - EncryptedChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => { if (error) { callback(error, authData); return; } - var sharedSecret = authData['shared_secret']; + let sharedSecret = authData['shared_secret']; if (!sharedSecret) { - callback(new Error("No shared_secret key in auth payload for encrypted channel: " + _this.name), null); + callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null); return; } - _this.key = Object(base64["decode"])(sharedSecret); + this.key = Object(base64["decode"])(sharedSecret); delete authData['shared_secret']; callback(null, authData); }); - }; - EncryptedChannel.prototype.trigger = function (event, data) { + } + trigger(event, data) { throw new UnsupportedFeature('Client events are not currently supported for encrypted channels'); - }; - EncryptedChannel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { - _super.prototype.handleEvent.call(this, event); + super.handleEvent(event); return; } this.handleEncryptedEvent(eventName, data); - }; - EncryptedChannel.prototype.handleEncryptedEvent = function (event, data) { - var _this = this; + } + handleEncryptedEvent(event, data) { if (!this.key) { logger.debug('Received encrypted event before key has been retrieved from the authEndpoint'); return; @@ -8930,98 +8667,81 @@ var encrypted_channel_EncryptedChannel = (function (_super) { data); return; } - var cipherText = Object(base64["decode"])(data.ciphertext); + let cipherText = Object(base64["decode"])(data.ciphertext); if (cipherText.length < this.nacl.secretbox.overheadLength) { - logger.error("Expected encrypted event ciphertext length to be " + this.nacl.secretbox.overheadLength + ", got: " + cipherText.length); + logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`); return; } - var nonce = Object(base64["decode"])(data.nonce); + let nonce = Object(base64["decode"])(data.nonce); if (nonce.length < this.nacl.secretbox.nonceLength) { - logger.error("Expected encrypted event nonce length to be " + this.nacl.secretbox.nonceLength + ", got: " + nonce.length); + logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`); return; } - var bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); + let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'); - this.authorize(this.pusher.connection.socket_id, function (error, authData) { + this.authorize(this.pusher.connection.socket_id, (error, authData) => { if (error) { - logger.error("Failed to make a request to the authEndpoint: " + authData + ". Unable to fetch new key, so dropping encrypted event"); + logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`); return; } - bytes = _this.nacl.secretbox.open(cipherText, nonce, _this.key); + bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { - logger.error("Failed to decrypt event with new key. Dropping encrypted event"); + logger.error(`Failed to decrypt event with new key. Dropping encrypted event`); return; } - _this.emit(event, _this.getDataToEmit(bytes)); + this.emit(event, this.getDataToEmit(bytes)); return; }); return; } this.emit(event, this.getDataToEmit(bytes)); - }; - EncryptedChannel.prototype.getDataToEmit = function (bytes) { - var raw = Object(utf8["decode"])(bytes); + } + getDataToEmit(bytes) { + let raw = Object(utf8["decode"])(bytes); try { return JSON.parse(raw); } catch (_a) { return raw; } - }; - return EncryptedChannel; -}(private_channel)); -/* harmony default export */ var encrypted_channel = (encrypted_channel_EncryptedChannel); + } +} // CONCATENATED MODULE: ./src/core/connection/connection_manager.ts -var connection_manager_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_manager_ConnectionManager = (function (_super) { - connection_manager_extends(ConnectionManager, _super); - function ConnectionManager(key, options) { - var _this = _super.call(this) || this; - _this.state = 'initialized'; - _this.connection = null; - _this.key = key; - _this.options = options; - _this.timeline = _this.options.timeline; - _this.usingTLS = _this.options.useTLS; - _this.errorCallbacks = _this.buildErrorCallbacks(); - _this.connectionCallbacks = _this.buildConnectionCallbacks(_this.errorCallbacks); - _this.handshakeCallbacks = _this.buildHandshakeCallbacks(_this.errorCallbacks); +class connection_manager_ConnectionManager extends dispatcher_Dispatcher { + constructor(key, options) { + super(); + this.state = 'initialized'; + this.connection = null; + this.key = key; + this.options = options; + this.timeline = this.options.timeline; + this.usingTLS = this.options.useTLS; + this.errorCallbacks = this.buildErrorCallbacks(); + this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks); + this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks); var Network = node_runtime.getNetwork(); - Network.bind('online', function () { - _this.timeline.info({ netinfo: 'online' }); - if (_this.state === 'connecting' || _this.state === 'unavailable') { - _this.retryIn(0); + Network.bind('online', () => { + this.timeline.info({ netinfo: 'online' }); + if (this.state === 'connecting' || this.state === 'unavailable') { + this.retryIn(0); } }); - Network.bind('offline', function () { - _this.timeline.info({ netinfo: 'offline' }); - if (_this.connection) { - _this.sendActivityCheck(); + Network.bind('offline', () => { + this.timeline.info({ netinfo: 'offline' }); + if (this.connection) { + this.sendActivityCheck(); } }); - _this.updateStrategy(); - return _this; + this.updateStrategy(); } - ConnectionManager.prototype.connect = function () { + connect() { if (this.connection || this.runner) { return; } @@ -9032,59 +8752,58 @@ var connection_manager_ConnectionManager = (function (_super) { this.updateState('connecting'); this.startConnecting(); this.setUnavailableTimer(); - }; - ConnectionManager.prototype.send = function (data) { + } + send(data) { if (this.connection) { return this.connection.send(data); } else { return false; } - }; - ConnectionManager.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { if (this.connection) { return this.connection.send_event(name, data, channel); } else { return false; } - }; - ConnectionManager.prototype.disconnect = function () { + } + disconnect() { this.disconnectInternally(); this.updateState('disconnected'); - }; - ConnectionManager.prototype.isUsingTLS = function () { + } + isUsingTLS() { return this.usingTLS; - }; - ConnectionManager.prototype.startConnecting = function () { - var _this = this; - var callback = function (error, handshake) { + } + startConnecting() { + var callback = (error, handshake) => { if (error) { - _this.runner = _this.strategy.connect(0, callback); + this.runner = this.strategy.connect(0, callback); } else { if (handshake.action === 'error') { - _this.emit('error', { + this.emit('error', { type: 'HandshakeError', error: handshake.error }); - _this.timeline.error({ handshakeError: handshake.error }); + this.timeline.error({ handshakeError: handshake.error }); } else { - _this.abortConnecting(); - _this.handshakeCallbacks[handshake.action](handshake); + this.abortConnecting(); + this.handshakeCallbacks[handshake.action](handshake); } } }; this.runner = this.strategy.connect(0, callback); - }; - ConnectionManager.prototype.abortConnecting = function () { + } + abortConnecting() { if (this.runner) { this.runner.abort(); this.runner = null; } - }; - ConnectionManager.prototype.disconnectInternally = function () { + } + disconnectInternally() { this.abortConnecting(); this.clearRetryTimer(); this.clearUnavailableTimer(); @@ -9092,136 +8811,129 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.abandonConnection(); connection.close(); } - }; - ConnectionManager.prototype.updateStrategy = function () { + } + updateStrategy() { this.strategy = this.options.getStrategy({ key: this.key, timeline: this.timeline, useTLS: this.usingTLS }); - }; - ConnectionManager.prototype.retryIn = function (delay) { - var _this = this; + } + retryIn(delay) { this.timeline.info({ action: 'retry', delay: delay }); if (delay > 0) { this.emit('connecting_in', Math.round(delay / 1000)); } - this.retryTimer = new OneOffTimer(delay || 0, function () { - _this.disconnectInternally(); - _this.connect(); + this.retryTimer = new timers_OneOffTimer(delay || 0, () => { + this.disconnectInternally(); + this.connect(); }); - }; - ConnectionManager.prototype.clearRetryTimer = function () { + } + clearRetryTimer() { if (this.retryTimer) { this.retryTimer.ensureAborted(); this.retryTimer = null; } - }; - ConnectionManager.prototype.setUnavailableTimer = function () { - var _this = this; - this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, function () { - _this.updateState('unavailable'); + } + setUnavailableTimer() { + this.unavailableTimer = new timers_OneOffTimer(this.options.unavailableTimeout, () => { + this.updateState('unavailable'); }); - }; - ConnectionManager.prototype.clearUnavailableTimer = function () { + } + clearUnavailableTimer() { if (this.unavailableTimer) { this.unavailableTimer.ensureAborted(); } - }; - ConnectionManager.prototype.sendActivityCheck = function () { - var _this = this; + } + sendActivityCheck() { this.stopActivityCheck(); this.connection.ping(); - this.activityTimer = new OneOffTimer(this.options.pongTimeout, function () { - _this.timeline.error({ pong_timed_out: _this.options.pongTimeout }); - _this.retryIn(0); + this.activityTimer = new timers_OneOffTimer(this.options.pongTimeout, () => { + this.timeline.error({ pong_timed_out: this.options.pongTimeout }); + this.retryIn(0); }); - }; - ConnectionManager.prototype.resetActivityCheck = function () { - var _this = this; + } + resetActivityCheck() { this.stopActivityCheck(); if (this.connection && !this.connection.handlesActivityChecks()) { - this.activityTimer = new OneOffTimer(this.activityTimeout, function () { - _this.sendActivityCheck(); + this.activityTimer = new timers_OneOffTimer(this.activityTimeout, () => { + this.sendActivityCheck(); }); } - }; - ConnectionManager.prototype.stopActivityCheck = function () { + } + stopActivityCheck() { if (this.activityTimer) { this.activityTimer.ensureAborted(); } - }; - ConnectionManager.prototype.buildConnectionCallbacks = function (errorCallbacks) { - var _this = this; + } + buildConnectionCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - message: function (message) { - _this.resetActivityCheck(); - _this.emit('message', message); + message: message => { + this.resetActivityCheck(); + this.emit('message', message); }, - ping: function () { - _this.send_event('pusher:pong', {}); + ping: () => { + this.send_event('pusher:pong', {}); }, - activity: function () { - _this.resetActivityCheck(); + activity: () => { + this.resetActivityCheck(); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function () { - _this.abandonConnection(); - if (_this.shouldRetry()) { - _this.retryIn(1000); + closed: () => { + this.abandonConnection(); + if (this.shouldRetry()) { + this.retryIn(1000); } } }); - }; - ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) { - var _this = this; + } + buildHandshakeCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - connected: function (handshake) { - _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); - _this.clearUnavailableTimer(); - _this.setConnection(handshake.connection); - _this.socket_id = _this.connection.id; - _this.updateState('connected', { socket_id: _this.socket_id }); + connected: (handshake) => { + this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); + this.clearUnavailableTimer(); + this.setConnection(handshake.connection); + this.socket_id = this.connection.id; + this.updateState('connected', { socket_id: this.socket_id }); } }); - }; - ConnectionManager.prototype.buildErrorCallbacks = function () { - var _this = this; - var withErrorEmitted = function (callback) { - return function (result) { + } + buildErrorCallbacks() { + let withErrorEmitted = callback => { + return (result) => { if (result.error) { - _this.emit('error', { type: 'WebSocketError', error: result.error }); + this.emit('error', { type: 'WebSocketError', error: result.error }); } callback(result); }; }; return { - tls_only: withErrorEmitted(function () { - _this.usingTLS = true; - _this.updateStrategy(); - _this.retryIn(0); + tls_only: withErrorEmitted(() => { + this.usingTLS = true; + this.updateStrategy(); + this.retryIn(0); }), - refused: withErrorEmitted(function () { - _this.disconnect(); + refused: withErrorEmitted(() => { + this.disconnect(); }), - backoff: withErrorEmitted(function () { - _this.retryIn(1000); + backoff: withErrorEmitted(() => { + this.retryIn(1000); }), - retry: withErrorEmitted(function () { - _this.retryIn(0); + retry: withErrorEmitted(() => { + this.retryIn(0); }) }; - }; - ConnectionManager.prototype.setConnection = function (connection) { + } + setConnection(connection) { this.connection = connection; for (var event in this.connectionCallbacks) { this.connection.bind(event, this.connectionCallbacks[event]); } this.resetActivityCheck(); - }; - ConnectionManager.prototype.abandonConnection = function () { + } + abandonConnection() { if (!this.connection) { return; } @@ -9232,8 +8944,8 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.connection; this.connection = null; return connection; - }; - ConnectionManager.prototype.updateState = function (newState, data) { + } + updateState(newState, data) { var previousState = this.state; this.state = newState; if (previousState !== newState) { @@ -9246,56 +8958,52 @@ var connection_manager_ConnectionManager = (function (_super) { this.emit('state_change', { previous: previousState, current: newState }); this.emit(newState, data); } - }; - ConnectionManager.prototype.shouldRetry = function () { + } + shouldRetry() { return this.state === 'connecting' || this.state === 'connected'; - }; - return ConnectionManager; -}(dispatcher)); -/* harmony default export */ var connection_manager = (connection_manager_ConnectionManager); + } +} // CONCATENATED MODULE: ./src/core/channels/channels.ts -var channels_Channels = (function () { - function Channels() { +class channels_Channels { + constructor() { this.channels = {}; } - Channels.prototype.add = function (name, pusher) { + add(name, pusher) { if (!this.channels[name]) { this.channels[name] = createChannel(name, pusher); } return this.channels[name]; - }; - Channels.prototype.all = function () { + } + all() { return values(this.channels); - }; - Channels.prototype.find = function (name) { + } + find(name) { return this.channels[name]; - }; - Channels.prototype.remove = function (name) { + } + remove(name) { var channel = this.channels[name]; delete this.channels[name]; return channel; - }; - Channels.prototype.disconnect = function () { + } + disconnect() { objectApply(this.channels, function (channel) { channel.disconnect(); }); - }; - return Channels; -}()); -/* harmony default export */ var channels = (channels_Channels); + } +} function createChannel(name, pusher) { if (name.indexOf('private-encrypted-') === 0) { if (pusher.config.nacl) { return factory.createEncryptedChannel(name, pusher, pusher.config.nacl); } - var errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; - var suffix = url_store.buildLogSuffix('encryptedChannelSupport'); - throw new UnsupportedFeature(errMsg + ". " + suffix); + let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; + let suffix = url_store.buildLogSuffix('encryptedChannelSupport'); + throw new UnsupportedFeature(`${errMsg}. ${suffix}`); } else if (name.indexOf('private-') === 0) { return factory.createPrivateChannel(name, pusher); @@ -9322,97 +9030,94 @@ function createChannel(name, pusher) { var Factory = { - createChannels: function () { - return new channels(); + createChannels() { + return new channels_Channels(); }, - createConnectionManager: function (key, options) { - return new connection_manager(key, options); + createConnectionManager(key, options) { + return new connection_manager_ConnectionManager(key, options); }, - createChannel: function (name, pusher) { - return new channels_channel(name, pusher); + createChannel(name, pusher) { + return new channel_Channel(name, pusher); }, - createPrivateChannel: function (name, pusher) { - return new private_channel(name, pusher); + createPrivateChannel(name, pusher) { + return new private_channel_PrivateChannel(name, pusher); }, - createPresenceChannel: function (name, pusher) { - return new presence_channel(name, pusher); + createPresenceChannel(name, pusher) { + return new presence_channel_PresenceChannel(name, pusher); }, - createEncryptedChannel: function (name, pusher, nacl) { - return new encrypted_channel(name, pusher, nacl); + createEncryptedChannel(name, pusher, nacl) { + return new encrypted_channel_EncryptedChannel(name, pusher, nacl); }, - createTimelineSender: function (timeline, options) { - return new timeline_sender(timeline, options); + createTimelineSender(timeline, options) { + return new timeline_sender_TimelineSender(timeline, options); }, - createHandshake: function (transport, callback) { - return new connection_handshake(transport, callback); + createHandshake(transport, callback) { + return new handshake_Handshake(transport, callback); }, - createAssistantToTheTransportManager: function (manager, transport, options) { - return new assistant_to_the_transport_manager(manager, transport, options); + createAssistantToTheTransportManager(manager, transport, options) { + return new assistant_to_the_transport_manager_AssistantToTheTransportManager(manager, transport, options); } }; /* harmony default export */ var factory = (Factory); // CONCATENATED MODULE: ./src/core/transports/transport_manager.ts -var transport_manager_TransportManager = (function () { - function TransportManager(options) { +class transport_manager_TransportManager { + constructor(options) { this.options = options || {}; this.livesLeft = this.options.lives || Infinity; } - TransportManager.prototype.getAssistant = function (transport) { + getAssistant(transport) { return factory.createAssistantToTheTransportManager(this, transport, { minPingDelay: this.options.minPingDelay, maxPingDelay: this.options.maxPingDelay }); - }; - TransportManager.prototype.isAlive = function () { + } + isAlive() { return this.livesLeft > 0; - }; - TransportManager.prototype.reportDeath = function () { + } + reportDeath() { this.livesLeft -= 1; - }; - return TransportManager; -}()); -/* harmony default export */ var transport_manager = (transport_manager_TransportManager); + } +} // CONCATENATED MODULE: ./src/core/strategies/sequential_strategy.ts -var sequential_strategy_SequentialStrategy = (function () { - function SequentialStrategy(strategies, options) { +class sequential_strategy_SequentialStrategy { + constructor(strategies, options) { this.strategies = strategies; this.loop = Boolean(options.loop); this.failFast = Boolean(options.failFast); this.timeout = options.timeout; this.timeoutLimit = options.timeoutLimit; } - SequentialStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - SequentialStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { var strategies = this.strategies; var current = 0; var timeout = this.timeout; var runner = null; - var tryNextStrategy = function (error, handshake) { + var tryNextStrategy = (error, handshake) => { if (handshake) { callback(null, handshake); } else { current = current + 1; - if (_this.loop) { + if (this.loop) { current = current % strategies.length; } if (current < strategies.length) { if (timeout) { timeout = timeout * 2; - if (_this.timeoutLimit) { - timeout = Math.min(timeout, _this.timeoutLimit); + if (this.timeoutLimit) { + timeout = Math.min(timeout, this.timeoutLimit); } } - runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy); + runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy); } else { callback(true); @@ -9431,12 +9136,12 @@ var sequential_strategy_SequentialStrategy = (function () { } } }; - }; - SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) { + } + tryStrategy(strategy, minPriority, options, callback) { var timer = null; var runner = null; if (options.timeout > 0) { - timer = new OneOffTimer(options.timeout, function () { + timer = new timers_OneOffTimer(options.timeout, function () { runner.abort(); callback(true); }); @@ -9461,22 +9166,20 @@ var sequential_strategy_SequentialStrategy = (function () { runner.forceMinPriority(p); } }; - }; - return SequentialStrategy; -}()); -/* harmony default export */ var sequential_strategy = (sequential_strategy_SequentialStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/best_connected_ever_strategy.ts -var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { - function BestConnectedEverStrategy(strategies) { +class best_connected_ever_strategy_BestConnectedEverStrategy { + constructor(strategies) { this.strategies = strategies; } - BestConnectedEverStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { return connect(this.strategies, minPriority, function (i, runners) { return function (error, handshake) { runners[i].error = error; @@ -9492,10 +9195,8 @@ var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { callback(null, handshake); }; }); - }; - return BestConnectedEverStrategy; -}()); -/* harmony default export */ var best_connected_ever_strategy = (best_connected_ever_strategy_BestConnectedEverStrategy); + } +} function connect(strategies, minPriority, callbackBuilder) { var runners = map(strategies, function (strategy, i, _, rs) { return strategy.connect(minPriority, callbackBuilder(i, rs)); @@ -9528,18 +9229,18 @@ function abortRunner(runner) { -var cached_strategy_CachedStrategy = (function () { - function CachedStrategy(strategy, transports, options) { +class cached_strategy_CachedStrategy { + constructor(strategy, transports, options) { this.strategy = strategy; this.transports = transports; this.ttl = options.ttl || 1800 * 1000; this.usingTLS = options.useTLS; this.timeline = options.timeline; } - CachedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - CachedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var usingTLS = this.usingTLS; var info = fetchTransportCache(usingTLS); var strategies = [this.strategy]; @@ -9551,7 +9252,7 @@ var cached_strategy_CachedStrategy = (function () { transport: info.transport, latency: info.latency }); - strategies.push(new sequential_strategy([transport], { + strategies.push(new sequential_strategy_SequentialStrategy([transport], { timeout: info.latency * 2 + 1000, failFast: true })); @@ -9587,10 +9288,8 @@ var cached_strategy_CachedStrategy = (function () { } } }; - }; - return CachedStrategy; -}()); -/* harmony default export */ var cached_strategy = (cached_strategy_CachedStrategy); + } +} function getTransportCacheKey(usingTLS) { return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS'); } @@ -9636,19 +9335,18 @@ function flushTransportCache(usingTLS) { // CONCATENATED MODULE: ./src/core/strategies/delayed_strategy.ts -var delayed_strategy_DelayedStrategy = (function () { - function DelayedStrategy(strategy, _a) { - var number = _a.delay; +class delayed_strategy_DelayedStrategy { + constructor(strategy, { delay: number }) { this.strategy = strategy; this.options = { delay: number }; } - DelayedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - DelayedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var strategy = this.strategy; var runner; - var timer = new OneOffTimer(this.options.delay, function () { + var timer = new timers_OneOffTimer(this.options.delay, function () { runner = strategy.connect(minPriority, callback); }); return { @@ -9665,39 +9363,35 @@ var delayed_strategy_DelayedStrategy = (function () { } } }; - }; - return DelayedStrategy; -}()); -/* harmony default export */ var delayed_strategy = (delayed_strategy_DelayedStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/if_strategy.ts -var IfStrategy = (function () { - function IfStrategy(test, trueBranch, falseBranch) { +class IfStrategy { + constructor(test, trueBranch, falseBranch) { this.test = test; this.trueBranch = trueBranch; this.falseBranch = falseBranch; } - IfStrategy.prototype.isSupported = function () { + isSupported() { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.isSupported(); - }; - IfStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.connect(minPriority, callback); - }; - return IfStrategy; -}()); -/* harmony default export */ var if_strategy = (IfStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/first_connected_strategy.ts -var FirstConnectedStrategy = (function () { - function FirstConnectedStrategy(strategy) { +class FirstConnectedStrategy { + constructor(strategy) { this.strategy = strategy; } - FirstConnectedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - FirstConnectedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var runner = this.strategy.connect(minPriority, function (error, handshake) { if (handshake) { runner.abort(); @@ -9705,10 +9399,8 @@ var FirstConnectedStrategy = (function () { callback(error, handshake); }); return runner; - }; - return FirstConnectedStrategy; -}()); -/* harmony default export */ var first_connected_strategy = (FirstConnectedStrategy); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/default_strategy.ts @@ -9749,12 +9441,12 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { timeout: 15000, timeoutLimit: 60000 }; - var ws_manager = new transport_manager({ + var ws_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout }); - var streaming_manager = new transport_manager({ + var streaming_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout @@ -9763,31 +9455,31 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { var wss_transport = defineTransportStrategy('wss', 'ws', 3, wss_options, ws_manager); var xhr_streaming_transport = defineTransportStrategy('xhr_streaming', 'xhr_streaming', 1, http_options, streaming_manager); var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, http_options); - var ws_loop = new sequential_strategy([ws_transport], timeouts); - var wss_loop = new sequential_strategy([wss_transport], timeouts); - var streaming_loop = new sequential_strategy([xhr_streaming_transport], timeouts); - var polling_loop = new sequential_strategy([xhr_polling_transport], timeouts); - var http_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy([ + var ws_loop = new sequential_strategy_SequentialStrategy([ws_transport], timeouts); + var wss_loop = new sequential_strategy_SequentialStrategy([wss_transport], timeouts); + var streaming_loop = new sequential_strategy_SequentialStrategy([xhr_streaming_transport], timeouts); + var polling_loop = new sequential_strategy_SequentialStrategy([xhr_polling_transport], timeouts); + var http_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy_BestConnectedEverStrategy([ streaming_loop, - new delayed_strategy(polling_loop, { delay: 4000 }) + new delayed_strategy_DelayedStrategy(polling_loop, { delay: 4000 }) ]), polling_loop) ], timeouts); var wsStrategy; if (baseOptions.useTLS) { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(http_loop, { delay: 2000 }) + new delayed_strategy_DelayedStrategy(http_loop, { delay: 2000 }) ]); } else { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(wss_loop, { delay: 2000 }), - new delayed_strategy(http_loop, { delay: 5000 }) + new delayed_strategy_DelayedStrategy(wss_loop, { delay: 2000 }), + new delayed_strategy_DelayedStrategy(http_loop, { delay: 5000 }) ]); } - return new cached_strategy(new first_connected_strategy(new if_strategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { + return new cached_strategy_CachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { ttl: 1800000, timeline: baseOptions.timeline, useTLS: baseOptions.useTLS @@ -9810,37 +9502,21 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { }); // CONCATENATED MODULE: ./src/core/http/http_request.ts -var http_request_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MAX_BUFFER_LENGTH = 256 * 1024; -var http_request_HTTPRequest = (function (_super) { - http_request_extends(HTTPRequest, _super); - function HTTPRequest(hooks, method, url) { - var _this = _super.call(this) || this; - _this.hooks = hooks; - _this.method = method; - _this.url = url; - return _this; +const MAX_BUFFER_LENGTH = 256 * 1024; +class http_request_HTTPRequest extends dispatcher_Dispatcher { + constructor(hooks, method, url) { + super(); + this.hooks = hooks; + this.method = method; + this.url = url; } - HTTPRequest.prototype.start = function (payload) { - var _this = this; + start(payload) { this.position = 0; this.xhr = this.hooks.getRequest(this); - this.unloader = function () { - _this.close(); + this.unloader = () => { + this.close(); }; node_runtime.addUnloadListener(this.unloader); this.xhr.open(this.method, this.url, true); @@ -9848,8 +9524,8 @@ var http_request_HTTPRequest = (function (_super) { this.xhr.setRequestHeader('Content-Type', 'application/json'); } this.xhr.send(payload); - }; - HTTPRequest.prototype.close = function () { + } + close() { if (this.unloader) { node_runtime.removeUnloadListener(this.unloader); this.unloader = null; @@ -9858,8 +9534,8 @@ var http_request_HTTPRequest = (function (_super) { this.hooks.abortRequest(this.xhr); this.xhr = null; } - }; - HTTPRequest.prototype.onChunk = function (status, data) { + } + onChunk(status, data) { while (true) { var chunk = this.advanceBuffer(data); if (chunk) { @@ -9872,8 +9548,8 @@ var http_request_HTTPRequest = (function (_super) { if (this.isBufferTooLong(data)) { this.emit('buffer_too_long'); } - }; - HTTPRequest.prototype.advanceBuffer = function (buffer) { + } + advanceBuffer(buffer) { var unreadData = buffer.slice(this.position); var endOfLinePosition = unreadData.indexOf('\n'); if (endOfLinePosition !== -1) { @@ -9883,13 +9559,11 @@ var http_request_HTTPRequest = (function (_super) { else { return null; } - }; - HTTPRequest.prototype.isBufferTooLong = function (buffer) { + } + isBufferTooLong(buffer) { return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH; - }; - return HTTPRequest; -}(dispatcher)); -/* harmony default export */ var http_request = (http_request_HTTPRequest); + } +} // CONCATENATED MODULE: ./src/core/http/state.ts var State; @@ -9905,24 +9579,24 @@ var State; var autoIncrement = 1; -var http_socket_HTTPSocket = (function () { - function HTTPSocket(hooks, url) { +class http_socket_HTTPSocket { + constructor(hooks, url) { this.hooks = hooks; this.session = randomNumber(1000) + '/' + randomString(8); this.location = getLocation(url); this.readyState = state.CONNECTING; this.openStream(); } - HTTPSocket.prototype.send = function (payload) { + send(payload) { return this.sendRaw(JSON.stringify([payload])); - }; - HTTPSocket.prototype.ping = function () { + } + ping() { this.hooks.sendHeartbeat(this); - }; - HTTPSocket.prototype.close = function (code, reason) { + } + close(code, reason) { this.onClose(code, reason, true); - }; - HTTPSocket.prototype.sendRaw = function (payload) { + } + sendRaw(payload) { if (this.readyState === state.OPEN) { try { node_runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload); @@ -9935,12 +9609,12 @@ var http_socket_HTTPSocket = (function () { else { return false; } - }; - HTTPSocket.prototype.reconnect = function () { + } + reconnect() { this.closeStream(); this.openStream(); - }; - HTTPSocket.prototype.onClose = function (code, reason, wasClean) { + } + onClose(code, reason, wasClean) { this.closeStream(); this.readyState = state.CLOSED; if (this.onclose) { @@ -9950,8 +9624,8 @@ var http_socket_HTTPSocket = (function () { wasClean: wasClean }); } - }; - HTTPSocket.prototype.onChunk = function (chunk) { + } + onChunk(chunk) { if (chunk.status !== 200) { return; } @@ -9983,8 +9657,8 @@ var http_socket_HTTPSocket = (function () { this.onClose(payload[0], payload[1], true); break; } - }; - HTTPSocket.prototype.onOpen = function (options) { + } + onOpen(options) { if (this.readyState === state.CONNECTING) { if (options && options.hostname) { this.location.base = replaceHost(this.location.base, options.hostname); @@ -9997,53 +9671,51 @@ var http_socket_HTTPSocket = (function () { else { this.onClose(1006, 'Server lost session', true); } - }; - HTTPSocket.prototype.onEvent = function (event) { + } + onEvent(event) { if (this.readyState === state.OPEN && this.onmessage) { this.onmessage({ data: event }); } - }; - HTTPSocket.prototype.onActivity = function () { + } + onActivity() { if (this.onactivity) { this.onactivity(); } - }; - HTTPSocket.prototype.onError = function (error) { + } + onError(error) { if (this.onerror) { this.onerror(error); } - }; - HTTPSocket.prototype.openStream = function () { - var _this = this; + } + openStream() { this.stream = node_runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))); - this.stream.bind('chunk', function (chunk) { - _this.onChunk(chunk); + this.stream.bind('chunk', chunk => { + this.onChunk(chunk); }); - this.stream.bind('finished', function (status) { - _this.hooks.onFinished(_this, status); + this.stream.bind('finished', status => { + this.hooks.onFinished(this, status); }); - this.stream.bind('buffer_too_long', function () { - _this.reconnect(); + this.stream.bind('buffer_too_long', () => { + this.reconnect(); }); try { this.stream.start(); } catch (error) { - util.defer(function () { - _this.onError(error); - _this.onClose(1006, 'Could not start streaming', false); + util.defer(() => { + this.onError(error); + this.onClose(1006, 'Could not start streaming', false); }); } - }; - HTTPSocket.prototype.closeStream = function () { + } + closeStream() { if (this.stream) { this.stream.unbind_all(); this.stream.close(); this.stream = null; } - }; - return HTTPSocket; -}()); + } +} function getLocation(url) { var parts = /([^\?]*)\/*(\??.*)/.exec(url); return { @@ -10150,20 +9822,20 @@ var http_xhr_request_hooks = { var HTTP = { - createStreamingSocket: function (url) { + createStreamingSocket(url) { return this.createSocket(http_streaming_socket, url); }, - createPollingSocket: function (url) { + createPollingSocket(url) { return this.createSocket(http_polling_socket, url); }, - createSocket: function (hooks, url) { + createSocket(hooks, url) { return new http_socket(hooks, url); }, - createXHR: function (method, url) { + createXHR(method, url) { return this.createRequest(http_xhr_request, method, url); }, - createRequest: function (hooks, method, url) { - return new http_request(hooks, method, url); + createRequest(hooks, method, url) { + return new http_request_HTTPRequest(hooks, method, url); } }; /* harmony default export */ var http_http = (HTTP); @@ -10179,24 +9851,24 @@ var Isomorphic = { Transports: transports, transportConnectionInitializer: transport_connection_initializer, HTTPFactory: http_http, - setup: function (PusherClass) { + setup(PusherClass) { PusherClass.ready(); }, - getLocalStorage: function () { + getLocalStorage() { return undefined; }, - getClientFeatures: function () { + getClientFeatures() { return keys(filterObject({ ws: transports.ws }, function (t) { return t.isSupported({}); })); }, - getProtocol: function () { + getProtocol() { return 'http:'; }, - isXHRSupported: function () { + isXHRSupported() { return true; }, - createSocketRequest: function (method, url) { + createSocketRequest(method, url) { if (this.isXHRSupported()) { return this.HTTPFactory.createXHR(method, url); } @@ -10204,16 +9876,16 @@ var Isomorphic = { throw 'Cross-origin HTTP requests are not supported'; } }, - createXHR: function () { + createXHR() { var Constructor = this.getXHRAPI(); return new Constructor(); }, - createWebSocket: function (url) { + createWebSocket(url) { var Constructor = this.getWebSocketAPI(); return new Constructor(url); }, - addUnloadListener: function (listener) { }, - removeUnloadListener: function (listener) { } + addUnloadListener(listener) { }, + removeUnloadListener(listener) { } }; /* harmony default export */ var runtime = (Isomorphic); @@ -10224,32 +9896,13 @@ var websocket = __webpack_require__(18); var XMLHttpRequest = __webpack_require__(19); // CONCATENATED MODULE: ./src/runtimes/node/net_info.ts -var net_info_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var NetInfo = (function (_super) { - net_info_extends(NetInfo, _super); - function NetInfo() { - return _super !== null && _super.apply(this, arguments) || this; - } - NetInfo.prototype.isOnline = function () { +class net_info_NetInfo extends dispatcher_Dispatcher { + isOnline() { return true; - }; - return NetInfo; -}(dispatcher)); - -var net_info_Network = new NetInfo(); + } +} +var net_info_Network = new net_info_NetInfo(); // CONCATENATED MODULE: ./src/core/auth/options.ts var AuthRequestType; @@ -10263,15 +9916,15 @@ var AuthRequestType; -var ajax = function (context, query, authOptions, authRequestType, callback) { - var xhr = node_runtime.createXHR(); +const ajax = function (context, query, authOptions, authRequestType, callback) { + const xhr = node_runtime.createXHR(); xhr.open('POST', authOptions.endpoint, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); for (var headerName in authOptions.headers) { xhr.setRequestHeader(headerName, authOptions.headers[headerName]); } if (authOptions.headersProvider != null) { - var dynamicHeaders = authOptions.headersProvider(); + let dynamicHeaders = authOptions.headersProvider(); for (var headerName in dynamicHeaders) { xhr.setRequestHeader(headerName, dynamicHeaders[headerName]); } @@ -10279,31 +9932,31 @@ var ajax = function (context, query, authOptions, authRequestType, callback) { xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { - var data = void 0; - var parsed = false; + let data; + let parsed = false; try { data = JSON.parse(xhr.responseText); parsed = true; } catch (e) { - callback(new HTTPAuthError(200, "JSON returned from " + authRequestType.toString() + " endpoint was invalid, yet status code was 200. Data was: " + xhr.responseText), null); + callback(new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${xhr.responseText}`), null); } if (parsed) { callback(null, data); } } else { - var suffix = ''; + let suffix = ''; switch (authRequestType) { case AuthRequestType.UserAuthentication: suffix = url_store.buildLogSuffix('authenticationEndpoint'); break; case AuthRequestType.ChannelAuthorization: - suffix = "Clients must be authorized to join private or presence channels. " + url_store.buildLogSuffix('authorizationEndpoint'); + suffix = `Clients must be authorized to join private or presence channels. ${url_store.buildLogSuffix('authorizationEndpoint')}`; break; } - callback(new HTTPAuthError(xhr.status, "Unable to retrieve auth string from " + authRequestType.toString() + " endpoint - " + - ("received status: " + xhr.status + " from " + authOptions.endpoint + ". " + suffix)), null); + callback(new HTTPAuthError(xhr.status, `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` + + `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`), null); } } }; @@ -10326,16 +9979,16 @@ var getAgent = function (sender, useTLS) { xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { - var status_1 = xhr.status, responseText = xhr.responseText; - if (status_1 !== 200) { - logger.debug("TimelineSender Error: received " + status_1 + " from stats.pusher.com"); + let { status, responseText } = xhr; + if (status !== 200) { + logger.debug(`TimelineSender Error: received ${status} from stats.pusher.com`); return; } try { - var host = JSON.parse(responseText).host; + var { host } = JSON.parse(responseText); } catch (e) { - logger.debug("TimelineSenderError: invalid response " + responseText); + logger.debug(`TimelineSenderError: invalid response ${responseText}`); } if (host) { sender.host = host; @@ -10347,7 +10000,7 @@ var getAgent = function (sender, useTLS) { }; var xhr_timeline_xhr = { name: 'xhr', - getAgent: getAgent + getAgent }; /* harmony default export */ var xhr_timeline = (xhr_timeline_xhr); @@ -10362,35 +10015,35 @@ var external_crypto_ = __webpack_require__(3); -var runtime_getDefaultStrategy = runtime.getDefaultStrategy, runtime_Transports = runtime.Transports, setup = runtime.setup, getProtocol = runtime.getProtocol, isXHRSupported = runtime.isXHRSupported, getLocalStorage = runtime.getLocalStorage, createXHR = runtime.createXHR, createWebSocket = runtime.createWebSocket, addUnloadListener = runtime.addUnloadListener, removeUnloadListener = runtime.removeUnloadListener, transportConnectionInitializer = runtime.transportConnectionInitializer, createSocketRequest = runtime.createSocketRequest, HTTPFactory = runtime.HTTPFactory; -var NodeJS = { +const { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, setup, getProtocol, isXHRSupported, getLocalStorage, createXHR, createWebSocket, addUnloadListener, removeUnloadListener, transportConnectionInitializer, createSocketRequest, HTTPFactory } = runtime; +const NodeJS = { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, - setup: setup, - getProtocol: getProtocol, - isXHRSupported: isXHRSupported, - createSocketRequest: createSocketRequest, - getLocalStorage: getLocalStorage, - createXHR: createXHR, - createWebSocket: createWebSocket, - addUnloadListener: addUnloadListener, - removeUnloadListener: removeUnloadListener, - transportConnectionInitializer: transportConnectionInitializer, - HTTPFactory: HTTPFactory, + setup, + getProtocol, + isXHRSupported, + createSocketRequest, + getLocalStorage, + createXHR, + createWebSocket, + addUnloadListener, + removeUnloadListener, + transportConnectionInitializer, + HTTPFactory, TimelineTransport: xhr_timeline, - getAuthorizers: function () { + getAuthorizers() { return { ajax: xhr_auth }; }, - getWebSocketAPI: function () { + getWebSocketAPI() { return websocket["Client"]; }, - getXHRAPI: function () { + getXHRAPI() { return XMLHttpRequest["XMLHttpRequest"]; }, - getNetwork: function () { + getNetwork() { return net_info_Network; }, - randomInt: function (max) { + randomInt(max) { return Object(external_crypto_["randomInt"])(max); } }; @@ -10409,8 +10062,8 @@ var TimelineLevel; -var timeline_Timeline = (function () { - function Timeline(key, session, options) { +class timeline_Timeline { + constructor(key, session, options) { this.key = key; this.session = session; this.events = []; @@ -10418,28 +10071,27 @@ var timeline_Timeline = (function () { this.sent = 0; this.uniqueID = 0; } - Timeline.prototype.log = function (level, event) { + log(level, event) { if (level <= this.options.level) { this.events.push(extend({}, event, { timestamp: util.now() })); if (this.options.limit && this.events.length > this.options.limit) { this.events.shift(); } } - }; - Timeline.prototype.error = function (event) { + } + error(event) { this.log(timeline_level.ERROR, event); - }; - Timeline.prototype.info = function (event) { + } + info(event) { this.log(timeline_level.INFO, event); - }; - Timeline.prototype.debug = function (event) { + } + debug(event) { this.log(timeline_level.DEBUG, event); - }; - Timeline.prototype.isEmpty = function () { + } + isEmpty() { return this.events.length === 0; - }; - Timeline.prototype.send = function (sendfn, callback) { - var _this = this; + } + send(sendfn, callback) { var data = extend({ session: this.session, bundle: this.sent + 1, @@ -10451,43 +10103,40 @@ var timeline_Timeline = (function () { timeline: this.events }, this.options.params); this.events = []; - sendfn(data, function (error, result) { + sendfn(data, (error, result) => { if (!error) { - _this.sent++; + this.sent++; } if (callback) { callback(error, result); } }); return true; - }; - Timeline.prototype.generateUniqueID = function () { + } + generateUniqueID() { this.uniqueID++; return this.uniqueID; - }; - return Timeline; -}()); -/* harmony default export */ var timeline_timeline = (timeline_Timeline); + } +} // CONCATENATED MODULE: ./src/core/strategies/transport_strategy.ts -var transport_strategy_TransportStrategy = (function () { - function TransportStrategy(name, priority, transport, options) { +class transport_strategy_TransportStrategy { + constructor(name, priority, transport, options) { this.name = name; this.priority = priority; this.transport = transport; this.options = options || {}; } - TransportStrategy.prototype.isSupported = function () { + isSupported() { return this.transport.isSupported({ useTLS: this.options.useTLS }); - }; - TransportStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { if (!this.isSupported()) { return failAttempt(new UnsupportedStrategy(), callback); } @@ -10530,7 +10179,7 @@ var transport_strategy_TransportStrategy = (function () { transport.bind('closed', onClosed); transport.initialize(); return { - abort: function () { + abort: () => { if (connected) { return; } @@ -10542,11 +10191,11 @@ var transport_strategy_TransportStrategy = (function () { transport.close(); } }, - forceMinPriority: function (p) { + forceMinPriority: p => { if (connected) { return; } - if (_this.priority < p) { + if (this.priority < p) { if (handshake) { handshake.close(); } @@ -10556,10 +10205,8 @@ var transport_strategy_TransportStrategy = (function () { } } }; - }; - return TransportStrategy; -}()); -/* harmony default export */ var transport_strategy = (transport_strategy_TransportStrategy); + } +} function failAttempt(error, callback) { util.defer(function () { callback(error); @@ -10576,7 +10223,7 @@ function failAttempt(error, callback) { -var strategy_builder_Transports = node_runtime.Transports; +const { Transports: strategy_builder_Transports } = node_runtime; var strategy_builder_defineTransport = function (config, name, type, priority, options, manager) { var transportClass = strategy_builder_Transports[type]; if (!transportClass) { @@ -10589,7 +10236,7 @@ var strategy_builder_defineTransport = function (config, name, type, priority, o var transport; if (enabled) { options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options); - transport = new transport_strategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); + transport = new transport_strategy_TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); } else { transport = strategy_builder_UnsupportedStrategy; @@ -10630,7 +10277,7 @@ function validateOptions(options) { // CONCATENATED MODULE: ./src/core/auth/user_authenticator.ts -var composeChannelQuery = function (params, authOptions) { +const composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); for (var key in authOptions.params) { query += @@ -10640,7 +10287,7 @@ var composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -10651,12 +10298,12 @@ var composeChannelQuery = function (params, authOptions) { } return query; }; -var UserAuthenticator = function (authOptions) { +const UserAuthenticator = (authOptions) => { if (typeof node_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = composeChannelQuery(params, authOptions); node_runtime.getAuthorizers()[authOptions.transport](node_runtime, query, authOptions, AuthRequestType.UserAuthentication, callback); }; }; @@ -10665,7 +10312,7 @@ var UserAuthenticator = function (authOptions) { // CONCATENATED MODULE: ./src/core/auth/channel_authorizer.ts -var channel_authorizer_composeChannelQuery = function (params, authOptions) { +const channel_authorizer_composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); query += '&channel_name=' + encodeURIComponent(params.channelName); for (var key in authOptions.params) { @@ -10676,7 +10323,7 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -10687,20 +10334,20 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { } return query; }; -var ChannelAuthorizer = function (authOptions) { +const ChannelAuthorizer = (authOptions) => { if (typeof node_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = channel_authorizer_composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = channel_authorizer_composeChannelQuery(params, authOptions); node_runtime.getAuthorizers()[authOptions.transport](node_runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback); }; }; /* harmony default export */ var channel_authorizer = (ChannelAuthorizer); // CONCATENATED MODULE: ./src/core/auth/deprecated_channel_authorizer.ts -var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGenerator) { - var deprecatedAuthorizerOptions = { +const ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => { + const deprecatedAuthorizerOptions = { authTransport: authOptions.transport, authEndpoint: authOptions.endpoint, auth: { @@ -10708,32 +10355,21 @@ var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGen headers: authOptions.headers } }; - return function (params, callback) { - var channel = pusher.channel(params.channelName); - var channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); + return (params, callback) => { + const channel = pusher.channel(params.channelName); + const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); channelAuthorizer.authorize(params.socketId, callback); }; }; // CONCATENATED MODULE: ./src/core/config.ts -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; function getConfig(opts, pusher) { - var config = { + let config = { activityTimeout: opts.activityTimeout || defaults.activityTimeout, cluster: opts.cluster, httpPath: opts.httpPath || defaults.httpPath, @@ -10770,7 +10406,7 @@ function getHttpHost(opts) { return opts.httpHost; } if (opts.cluster) { - return "sockjs-" + opts.cluster + ".pusher.com"; + return `sockjs-${opts.cluster}.pusher.com`; } return defaults.httpHost; } @@ -10781,7 +10417,7 @@ function getWebsocketHost(opts) { return getWebsocketHostFromCluster(opts.cluster); } function getWebsocketHostFromCluster(cluster) { - return "ws-" + cluster + ".pusher.com"; + return `ws-${cluster}.pusher.com`; } function shouldUseTLS(opts) { if (node_runtime.getProtocol() === 'https:') { @@ -10802,7 +10438,7 @@ function getEnableStatsConfig(opts) { return false; } function buildUserAuthenticator(opts) { - var userAuthentication = __assign(__assign({}, defaults.userAuthentication), opts.userAuthentication); + const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication); if ('customHandler' in userAuthentication && userAuthentication['customHandler'] != null) { return userAuthentication['customHandler']; @@ -10810,9 +10446,9 @@ function buildUserAuthenticator(opts) { return user_authenticator(userAuthentication); } function buildChannelAuth(opts, pusher) { - var channelAuthorization; + let channelAuthorization; if ('channelAuthorization' in opts) { - channelAuthorization = __assign(__assign({}, defaults.channelAuthorization), opts.channelAuthorization); + channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization); } else { channelAuthorization = { @@ -10831,7 +10467,7 @@ function buildChannelAuth(opts, pusher) { return channelAuthorization; } function buildChannelAuthorizer(opts, pusher) { - var channelAuthorization = buildChannelAuth(opts, pusher); + const channelAuthorization = buildChannelAuth(opts, pusher); if ('customHandler' in channelAuthorization && channelAuthorization['customHandler'] != null) { return channelAuthorization['customHandler']; @@ -10840,134 +10476,99 @@ function buildChannelAuthorizer(opts, pusher) { } // CONCATENATED MODULE: ./src/core/watchlist.ts -var watchlist_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var watchlist_WatchlistFacade = (function (_super) { - watchlist_extends(WatchlistFacade, _super); - function WatchlistFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { - logger.debug("No callbacks on watchlist events for " + eventName); - }) || this; - _this.pusher = pusher; - _this.bindWatchlistInternalEvent(); - return _this; - } - WatchlistFacade.prototype.handleEvent = function (pusherEvent) { - var _this = this; - pusherEvent.data.events.forEach(function (watchlistEvent) { - _this.emit(watchlistEvent.name, watchlistEvent); +class watchlist_WatchlistFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { + logger.debug(`No callbacks on watchlist events for ${eventName}`); }); - }; - WatchlistFacade.prototype.bindWatchlistInternalEvent = function () { - var _this = this; - this.pusher.connection.bind('message', function (pusherEvent) { + this.pusher = pusher; + this.bindWatchlistInternalEvent(); + } + handleEvent(pusherEvent) { + pusherEvent.data.events.forEach(watchlistEvent => { + this.emit(watchlistEvent.name, watchlistEvent); + }); + } + bindWatchlistInternalEvent() { + this.pusher.connection.bind('message', pusherEvent => { var eventName = pusherEvent.event; if (eventName === 'pusher_internal:watchlist_events') { - _this.handleEvent(pusherEvent); + this.handleEvent(pusherEvent); } }); - }; - return WatchlistFacade; -}(dispatcher)); -/* harmony default export */ var watchlist = (watchlist_WatchlistFacade); + } +} // CONCATENATED MODULE: ./src/core/utils/flat_promise.ts function flatPromise() { - var resolve, reject; - var promise = new Promise(function (res, rej) { + let resolve, reject; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); - return { promise: promise, resolve: resolve, reject: reject }; + return { promise, resolve, reject }; } /* harmony default export */ var flat_promise = (flatPromise); // CONCATENATED MODULE: ./src/core/user.ts -var user_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var user_UserFacade = (function (_super) { - user_extends(UserFacade, _super); - function UserFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { +class user_UserFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { logger.debug('No callbacks on user for ' + eventName); - }) || this; - _this.signin_requested = false; - _this.user_data = null; - _this.serverToUserChannel = null; - _this.signinDonePromise = null; - _this._signinDoneResolve = null; - _this._onAuthorize = function (err, authData) { + }); + this.signin_requested = false; + this.user_data = null; + this.serverToUserChannel = null; + this.signinDonePromise = null; + this._signinDoneResolve = null; + this._onAuthorize = (err, authData) => { if (err) { - logger.warn("Error during signin: " + err); - _this._cleanup(); + logger.warn(`Error during signin: ${err}`); + this._cleanup(); return; } - _this.pusher.send_event('pusher:signin', { + this.pusher.send_event('pusher:signin', { auth: authData.auth, user_data: authData.user_data }); }; - _this.pusher = pusher; - _this.pusher.connection.bind('state_change', function (_a) { - var previous = _a.previous, current = _a.current; + this.pusher = pusher; + this.pusher.connection.bind('state_change', ({ previous, current }) => { if (previous !== 'connected' && current === 'connected') { - _this._signin(); + this._signin(); } if (previous === 'connected' && current !== 'connected') { - _this._cleanup(); - _this._newSigninPromiseIfNeeded(); + this._cleanup(); + this._newSigninPromiseIfNeeded(); } }); - _this.watchlist = new watchlist(pusher); - _this.pusher.connection.bind('message', function (event) { + this.watchlist = new watchlist_WatchlistFacade(pusher); + this.pusher.connection.bind('message', event => { var eventName = event.event; if (eventName === 'pusher:signin_success') { - _this._onSigninSuccess(event.data); + this._onSigninSuccess(event.data); } - if (_this.serverToUserChannel && - _this.serverToUserChannel.name === event.channel) { - _this.serverToUserChannel.handleEvent(event); + if (this.serverToUserChannel && + this.serverToUserChannel.name === event.channel) { + this.serverToUserChannel.handleEvent(event); } }); - return _this; } - UserFacade.prototype.signin = function () { + signin() { if (this.signin_requested) { return; } this.signin_requested = true; this._signin(); - }; - UserFacade.prototype._signin = function () { + } + _signin() { if (!this.signin_requested) { return; } @@ -10978,46 +10579,45 @@ var user_UserFacade = (function (_super) { this.pusher.config.userAuthenticator({ socketId: this.pusher.connection.socket_id }, this._onAuthorize); - }; - UserFacade.prototype._onSigninSuccess = function (data) { + } + _onSigninSuccess(data) { try { this.user_data = JSON.parse(data.user_data); } catch (e) { - logger.error("Failed parsing user data after signin: " + data.user_data); + logger.error(`Failed parsing user data after signin: ${data.user_data}`); this._cleanup(); return; } if (typeof this.user_data.id !== 'string' || this.user_data.id === '') { - logger.error("user_data doesn't contain an id. user_data: " + this.user_data); + logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`); this._cleanup(); return; } this._signinDoneResolve(); this._subscribeChannels(); - }; - UserFacade.prototype._subscribeChannels = function () { - var _this = this; - var ensure_subscribed = function (channel) { + } + _subscribeChannels() { + const ensure_subscribed = channel => { if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); } else if (!channel.subscriptionPending && - _this.pusher.connection.state === 'connected') { + this.pusher.connection.state === 'connected') { channel.subscribe(); } }; - this.serverToUserChannel = new channels_channel("#server-to-user-" + this.user_data.id, this.pusher); - this.serverToUserChannel.bind_global(function (eventName, data) { + this.serverToUserChannel = new channel_Channel(`#server-to-user-${this.user_data.id}`, this.pusher); + this.serverToUserChannel.bind_global((eventName, data) => { if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { return; } - _this.emit(eventName, data); + this.emit(eventName, data); }); ensure_subscribed(this.serverToUserChannel); - }; - UserFacade.prototype._cleanup = function () { + } + _cleanup() { this.user_data = null; if (this.serverToUserChannel) { this.serverToUserChannel.unbind_all(); @@ -11027,26 +10627,24 @@ var user_UserFacade = (function (_super) { if (this.signin_requested) { this._signinDoneResolve(); } - }; - UserFacade.prototype._newSigninPromiseIfNeeded = function () { + } + _newSigninPromiseIfNeeded() { if (!this.signin_requested) { return; } if (this.signinDonePromise && !this.signinDonePromise.done) { return; } - var _a = flat_promise(), promise = _a.promise, resolve = _a.resolve, _ = _a.reject; + const { promise, resolve, reject: _ } = flat_promise(); promise.done = false; - var setDone = function () { + const setDone = () => { promise.done = true; }; - promise.then(setDone)["catch"](setDone); + promise.then(setDone).catch(setDone); this.signinDonePromise = promise; this._signinDoneResolve = resolve; - }; - return UserFacade; -}(dispatcher)); -/* harmony default export */ var user = (user_UserFacade); + } +} // CONCATENATED MODULE: ./src/core/pusher.ts @@ -11062,19 +10660,29 @@ var user_UserFacade = (function (_super) { -var pusher_Pusher = (function () { - function Pusher(app_key, options) { - var _this = this; +class pusher_Pusher { + static ready() { + pusher_Pusher.isReady = true; + for (var i = 0, l = pusher_Pusher.instances.length; i < l; i++) { + pusher_Pusher.instances[i].connect(); + } + } + static getClientFeatures() { + return keys(filterObject({ ws: node_runtime.Transports.ws }, function (t) { + return t.isSupported({}); + })); + } + constructor(app_key, options) { checkAppKey(app_key); validateOptions(options); this.key = app_key; this.config = getConfig(options, this); this.channels = factory.createChannels(); - this.global_emitter = new dispatcher(); + this.global_emitter = new dispatcher_Dispatcher(); this.sessionID = node_runtime.randomInt(1000000000); - this.timeline = new timeline_timeline(this.key, this.sessionID, { + this.timeline = new timeline_Timeline(this.key, this.sessionID, { cluster: this.config.cluster, - features: Pusher.getClientFeatures(), + features: pusher_Pusher.getClientFeatures(), params: this.config.timelineParams || {}, limit: 50, level: timeline_level.INFO, @@ -11086,8 +10694,8 @@ var pusher_Pusher = (function () { path: '/timeline/v2/' + node_runtime.TimelineTransport.name }); } - var getStrategy = function (options) { - return node_runtime.getDefaultStrategy(_this.config, options, strategy_builder_defineTransport); + var getStrategy = (options) => { + return node_runtime.getDefaultStrategy(this.config, options, strategy_builder_defineTransport); }; this.connection = factory.createConnectionManager(this.key, { getStrategy: getStrategy, @@ -11097,106 +10705,95 @@ var pusher_Pusher = (function () { unavailableTimeout: this.config.unavailableTimeout, useTLS: Boolean(this.config.useTLS) }); - this.connection.bind('connected', function () { - _this.subscribeAll(); - if (_this.timelineSender) { - _this.timelineSender.send(_this.connection.isUsingTLS()); + this.connection.bind('connected', () => { + this.subscribeAll(); + if (this.timelineSender) { + this.timelineSender.send(this.connection.isUsingTLS()); } }); - this.connection.bind('message', function (event) { + this.connection.bind('message', event => { var eventName = event.event; var internal = eventName.indexOf('pusher_internal:') === 0; if (event.channel) { - var channel = _this.channel(event.channel); + var channel = this.channel(event.channel); if (channel) { channel.handleEvent(event); } } if (!internal) { - _this.global_emitter.emit(event.event, event.data); + this.global_emitter.emit(event.event, event.data); } }); - this.connection.bind('connecting', function () { - _this.channels.disconnect(); + this.connection.bind('connecting', () => { + this.channels.disconnect(); }); - this.connection.bind('disconnected', function () { - _this.channels.disconnect(); + this.connection.bind('disconnected', () => { + this.channels.disconnect(); }); - this.connection.bind('error', function (err) { + this.connection.bind('error', err => { logger.warn(err); }); - Pusher.instances.push(this); - this.timeline.info({ instances: Pusher.instances.length }); - this.user = new user(this); - if (Pusher.isReady) { + pusher_Pusher.instances.push(this); + this.timeline.info({ instances: pusher_Pusher.instances.length }); + this.user = new user_UserFacade(this); + if (pusher_Pusher.isReady) { this.connect(); } } - Pusher.ready = function () { - Pusher.isReady = true; - for (var i = 0, l = Pusher.instances.length; i < l; i++) { - Pusher.instances[i].connect(); - } - }; - Pusher.getClientFeatures = function () { - return keys(filterObject({ ws: node_runtime.Transports.ws }, function (t) { - return t.isSupported({}); - })); - }; - Pusher.prototype.channel = function (name) { + channel(name) { return this.channels.find(name); - }; - Pusher.prototype.allChannels = function () { + } + allChannels() { return this.channels.all(); - }; - Pusher.prototype.connect = function () { + } + connect() { this.connection.connect(); if (this.timelineSender) { if (!this.timelineSenderTimer) { var usingTLS = this.connection.isUsingTLS(); var timelineSender = this.timelineSender; - this.timelineSenderTimer = new PeriodicTimer(60000, function () { + this.timelineSenderTimer = new timers_PeriodicTimer(60000, function () { timelineSender.send(usingTLS); }); } } - }; - Pusher.prototype.disconnect = function () { + } + disconnect() { this.connection.disconnect(); if (this.timelineSenderTimer) { this.timelineSenderTimer.ensureAborted(); this.timelineSenderTimer = null; } - }; - Pusher.prototype.bind = function (event_name, callback, context) { + } + bind(event_name, callback, context) { this.global_emitter.bind(event_name, callback, context); return this; - }; - Pusher.prototype.unbind = function (event_name, callback, context) { + } + unbind(event_name, callback, context) { this.global_emitter.unbind(event_name, callback, context); return this; - }; - Pusher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_emitter.bind_global(callback); return this; - }; - Pusher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { this.global_emitter.unbind_global(callback); return this; - }; - Pusher.prototype.unbind_all = function (callback) { + } + unbind_all(callback) { this.global_emitter.unbind_all(); return this; - }; - Pusher.prototype.subscribeAll = function () { + } + subscribeAll() { var channelName; for (channelName in this.channels.channels) { if (this.channels.channels.hasOwnProperty(channelName)) { this.subscribe(channelName); } } - }; - Pusher.prototype.subscribe = function (channel_name) { + } + subscribe(channel_name) { var channel = this.channels.add(channel_name, this); if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); @@ -11206,8 +10803,8 @@ var pusher_Pusher = (function () { channel.subscribe(); } return channel; - }; - Pusher.prototype.unsubscribe = function (channel_name) { + } + unsubscribe(channel_name) { var channel = this.channels.find(channel_name); if (channel && channel.subscriptionPending) { channel.cancelSubscription(); @@ -11218,25 +10815,24 @@ var pusher_Pusher = (function () { channel.unsubscribe(); } } - }; - Pusher.prototype.send_event = function (event_name, data, channel) { + } + send_event(event_name, data, channel) { return this.connection.send_event(event_name, data, channel); - }; - Pusher.prototype.shouldUseTLS = function () { + } + shouldUseTLS() { return this.config.useTLS; - }; - Pusher.prototype.signin = function () { + } + signin() { this.user.signin(); - }; - Pusher.instances = []; - Pusher.isReady = false; - Pusher.logToConsole = false; - Pusher.Runtime = node_runtime; - Pusher.ScriptReceivers = node_runtime.ScriptReceivers; - Pusher.DependenciesReceivers = node_runtime.DependenciesReceivers; - Pusher.auth_callbacks = node_runtime.auth_callbacks; - return Pusher; -}()); + } +} +pusher_Pusher.instances = []; +pusher_Pusher.isReady = false; +pusher_Pusher.logToConsole = false; +pusher_Pusher.Runtime = node_runtime; +pusher_Pusher.ScriptReceivers = node_runtime.ScriptReceivers; +pusher_Pusher.DependenciesReceivers = node_runtime.DependenciesReceivers; +pusher_Pusher.auth_callbacks = node_runtime.auth_callbacks; /* harmony default export */ var core_pusher = (pusher_Pusher); function checkAppKey(key) { if (key === null || key === undefined) { @@ -11249,36 +10845,18 @@ node_runtime.setup(pusher_Pusher); var nacl_fast = __webpack_require__(20); // CONCATENATED MODULE: ./src/core/pusher-with-encryption.ts -var pusher_with_encryption_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var pusher_with_encryption_PusherWithEncryption = (function (_super) { - pusher_with_encryption_extends(PusherWithEncryption, _super); - function PusherWithEncryption(app_key, options) { - var _this = this; - core_pusher.logToConsole = PusherWithEncryption.logToConsole; - core_pusher.log = PusherWithEncryption.log; +class pusher_with_encryption_PusherWithEncryption extends core_pusher { + constructor(app_key, options) { + core_pusher.logToConsole = pusher_with_encryption_PusherWithEncryption.logToConsole; + core_pusher.log = pusher_with_encryption_PusherWithEncryption.log; validateOptions(options); options.nacl = nacl_fast; - _this = _super.call(this, app_key, options) || this; - return _this; + super(app_key, options); } - return PusherWithEncryption; -}(core_pusher)); -/* harmony default export */ var pusher_with_encryption = __webpack_exports__["default"] = (pusher_with_encryption_PusherWithEncryption); +} /***/ }) diff --git a/dist/node/pusher.js.map b/dist/node/pusher.js.map index 3751f3197..8b1396aaf 100644 --- a/dist/node/pusher.js.map +++ b/dist/node/pusher.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/bootstrap","webpack://Pusher/external \"util\"","webpack://Pusher/./node_modules/safe-buffer/index.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/base.js","webpack://Pusher/external \"crypto\"","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver.js","webpack://Pusher/external \"stream\"","webpack://Pusher/external \"url\"","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api/event.js","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/headers.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/http_parser.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/ring_buffer.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/pledge.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/draft75.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api/event_target.js","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket.js","webpack://Pusher/./node_modules/xmlhttprequest/lib/XMLHttpRequest.js","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/external \"buffer\"","webpack://Pusher/external \"events\"","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/streams.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/stream_reader.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/client.js","webpack://Pusher/./node_modules/http-parser-js/http-parser.js","webpack://Pusher/external \"assert\"","webpack://Pusher/./node_modules/websocket-extensions/lib/websocket_extensions.js","webpack://Pusher/./node_modules/websocket-extensions/lib/parser.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/index.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/cell.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/functor.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi/message.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/proxy.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/server.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/draft76.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/client.js","webpack://Pusher/external \"net\"","webpack://Pusher/external \"tls\"","webpack://Pusher/./node_modules/faye-websocket/lib/faye/eventsource.js","webpack://Pusher/external \"child_process\"","webpack://Pusher/external \"fs\"","webpack://Pusher/external \"http\"","webpack://Pusher/external \"https\"","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/node/net_info.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/runtimes/isomorphic/timeline/xhr_timeline.ts","webpack://Pusher/./src/runtimes/node/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":";;;;;;;;;;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;AClFA,iC;;;;;;ACAA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Da;;AAEb,cAAc,mBAAO,CAAC,CAAa;AACnC,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,CAAM;AAC5B,cAAc,mBAAO,CAAC,EAAY;AAClC,cAAc,mBAAO,CAAC,CAAW;AACjC,cAAc,mBAAO,CAAC,EAAiB;;AAEvC;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yCAAyC,+BAA+B;AACxE;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AChMA,mC;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,CAAe;AACpC,aAAa,mBAAO,CAAC,EAAiB;AACtC,aAAa,mBAAO,CAAC,EAAiB;;AAEtC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;;;;;;AC1CA,mC;;;;;;ACAA,gC;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;ACrBA,sCAAsC;AACtC,6CAA6C;;;;;;;;;;;;;;;AAE7C;;GAEG;AAEH,iDAAiD;AACjD,kDAAkD;AAClD,kCAAkC;AACl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AEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;AClCa;;AAEb,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,qBAAqB,mBAAO,CAAC,CAAa;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,yBAAyB;AAC/E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACtIa;;AAEb,kBAAkB,mBAAO,CAAC,CAAQ;AAClC,kBAAkB,mBAAO,CAAC,CAAM;AAChC,kBAAkB,mBAAO,CAAC,CAAkB;AAC5C,kBAAkB,mBAAO,CAAC,EAAoB;AAC9C,kBAAkB,mBAAO,CAAC,CAAa;;AAEvC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,0CAA0C,eAAe;AACzD,0CAA0C,+BAA+B;AACzE,0CAA0C,qCAAqC;;AAE/E;AACA;AACA,GAAG;AACH,gCAAgC;;AAEhC;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC,wBAAwB;AACjE,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA,sCAAsC,WAAW;AACjD;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,oCAAoC,iBAAiB;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oCAAoC,2BAA2B;AAC/D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACpMa;;AAEb,iBAAiB,mBAAO,CAAC,CAAa;AACtC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,CAAM;AAC/B,iBAAiB,mBAAO,CAAC,EAAsB;AAC/C,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAgB;;AAEzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,+CAA+C,mCAAmC;AAClF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,8GAA8G,EAAE,uDAAuD,EAAE,wBAAwB,EAAE,4BAA4B,EAAE;;AAEjO;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,oCAAoC;AAC7E;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AClea;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;ACjEa;;AAEb,iBAAiB,mBAAO,CAAC,EAAe;;AAExC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AA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;AAC3B,cAAc,mBAAO,CAAC,EAAO;;AAE7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,8CAA8C;AAC9C;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA,iGAAiG;AACjG,gEAAgE;AAChE,yDAAyD;AACzD,iCAAiC;AACjC,4DAA4D;AAC5D,wCAAwC;AACxC,gDAAgD;AAChD,mCAAmC;AACnC,YAAY,EAAE;AACd,0CAA0C;AAC1C,mEAAmE,kBAAkB,gFAAgF,WAAW;AAChL,6CAA6C;AAC7C,YAAY,EAAE;AACd,iDAAiD;AACjD,mEAAmE,WAAW,WAAW;AACzF,6CAA6C;AAC7C,YAAY,EAAE;AACd,YAAY,+BAA+B;AAC3C,mEAAmE,WAAW,WAAW;AACzF,6CAA6C;AAC7C,YAAY,EAAE;AACd,8FAA8F;AAC9F,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3mBA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,KAAK;AACL,GAAG,UAAU,IAA8B;AAC3C;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,OAAO;AACP;AACA;AACA,CAAC;;AAED,CAAC,EAAE,KAA6B,kEAAkE;;;;;;;ACt1ElG,iBAAiB,mBAAO,CAAC,EAA0B;;;;;;;ACAnD,mC;;;;;;ACAA,mC;;;;;;;ACAa;;AAEb;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAM;;;AAG3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;;;;;;;ACjJa;;AAEb,aAAa,mBAAO,CAAC,CAAa;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACpEa;;AAEb,iBAAiB,mBAAO,CAAC,CAAa;AACtC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,CAAK;AAC9B,iBAAiB,mBAAO,CAAC,CAAM;AAC/B,iBAAiB,mBAAO,CAAC,EAAgB;AACzC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAS;;AAElC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AC7IA;;AAEA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,UAAU;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;;;;;;;AC9cA,mC;;;;;;;ACAa;;AAEb,eAAe,mBAAO,CAAC,EAAU;AACjC,eAAe,mBAAO,CAAC,EAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,mBAAmB,wCAAwC;AAC3D;;AAEA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACjKa;;AAEb;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,mCAAmC,gBAAgB;AACnD,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,6BAA6B;AACnD;;AAEA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACtGa;;AAEb,aAAa,mBAAO,CAAC,EAAQ;AAC7B,aAAa,mBAAO,CAAC,EAAU;;AAE/B;AACA,kDAAkD,2BAA2B;AAC7E,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;;AAEnB,4CAA4C,mBAAmB;AAC/D;AACA,wCAAwC,yBAAyB;AACjE;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;AC9Ca;;AAEb,cAAc,mBAAO,CAAC,EAAW;AACjC,cAAc,mBAAO,CAAC,EAAU;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACpDa;;AAEb,iBAAiB,mBAAO,CAAC,EAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,gBAAgB,oFAAoF;AACpG;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACvEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"pusher.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 21);\n","module.exports = require(\"util\");","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Emitter = require('events').EventEmitter,\n util = require('util'),\n streams = require('../streams'),\n Headers = require('./headers'),\n Reader = require('./stream_reader');\n\nvar Base = function(request, url, options) {\n Emitter.call(this);\n Base.validateOptions(options || {}, ['maxLength', 'masking', 'requireMasking', 'protocols']);\n\n this._request = request;\n this._reader = new Reader();\n this._options = options || {};\n this._maxLength = this._options.maxLength || this.MAX_LENGTH;\n this._headers = new Headers();\n this.__queue = [];\n this.readyState = 0;\n this.url = url;\n\n this.io = new streams.IO(this);\n this.messages = new streams.Messages(this);\n this._bindEventListeners();\n};\nutil.inherits(Base, Emitter);\n\nBase.isWebSocket = function(request) {\n var connection = request.headers.connection || '',\n upgrade = request.headers.upgrade || '';\n\n return request.method === 'GET' &&\n connection.toLowerCase().split(/ *, */).indexOf('upgrade') >= 0 &&\n upgrade.toLowerCase() === 'websocket';\n};\n\nBase.validateOptions = function(options, validKeys) {\n for (var key in options) {\n if (validKeys.indexOf(key) < 0)\n throw new Error('Unrecognized option: ' + key);\n }\n};\n\nvar instance = {\n // This is 64MB, small enough for an average VPS to handle without\n // crashing from process out of memory\n MAX_LENGTH: 0x3ffffff,\n\n STATES: ['connecting', 'open', 'closing', 'closed'],\n\n _bindEventListeners: function() {\n var self = this;\n\n // Protocol errors are informational and do not have to be handled\n this.messages.on('error', function() {});\n\n this.on('message', function(event) {\n var messages = self.messages;\n if (messages.readable) messages.emit('data', event.data);\n });\n\n this.on('error', function(error) {\n var messages = self.messages;\n if (messages.readable) messages.emit('error', error);\n });\n\n this.on('close', function() {\n var messages = self.messages;\n if (!messages.readable) return;\n messages.readable = messages.writable = false;\n messages.emit('end');\n });\n },\n\n getState: function() {\n return this.STATES[this.readyState] || null;\n },\n\n addExtension: function(extension) {\n return false;\n },\n\n setHeader: function(name, value) {\n if (this.readyState > 0) return false;\n this._headers.set(name, value);\n return true;\n },\n\n start: function() {\n if (this.readyState !== 0) return false;\n\n if (!Base.isWebSocket(this._request))\n return this._failHandshake(new Error('Not a WebSocket request'));\n\n var response;\n\n try {\n response = this._handshakeResponse();\n } catch (error) {\n return this._failHandshake(error);\n }\n\n this._write(response);\n if (this._stage !== -1) this._open();\n return true;\n },\n\n _failHandshake: function(error) {\n var headers = new Headers();\n headers.set('Content-Type', 'text/plain');\n headers.set('Content-Length', Buffer.byteLength(error.message, 'utf8'));\n\n headers = ['HTTP/1.1 400 Bad Request', headers.toString(), error.message];\n this._write(Buffer.from(headers.join('\\r\\n'), 'utf8'));\n this._fail('protocol_error', error.message);\n\n return false;\n },\n\n text: function(message) {\n return this.frame(message);\n },\n\n binary: function(message) {\n return false;\n },\n\n ping: function() {\n return false;\n },\n\n pong: function() {\n return false;\n },\n\n close: function(reason, code) {\n if (this.readyState !== 1) return false;\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n _open: function() {\n this.readyState = 1;\n this.__queue.forEach(function(args) { this.frame.apply(this, args) }, this);\n this.__queue = [];\n this.emit('open', new Base.OpenEvent());\n },\n\n _queue: function(message) {\n this.__queue.push(message);\n return true;\n },\n\n _write: function(chunk) {\n var io = this.io;\n if (io.readable) io.emit('data', chunk);\n },\n\n _fail: function(type, message) {\n this.readyState = 2;\n this.emit('error', new Error(message));\n this.close();\n }\n};\n\nfor (var key in instance)\n Base.prototype[key] = instance[key];\n\n\nBase.ConnectEvent = function() {};\n\nBase.OpenEvent = function() {};\n\nBase.CloseEvent = function(code, reason) {\n this.code = code;\n this.reason = reason;\n};\n\nBase.MessageEvent = function(data) {\n this.data = data;\n};\n\nBase.PingEvent = function(data) {\n this.data = data;\n};\n\nBase.PongEvent = function(data) {\n this.data = data;\n};\n\nmodule.exports = Base;\n","module.exports = require(\"crypto\");","'use strict';\n\n// Protocol references:\n//\n// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75\n// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76\n// * http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17\n\nvar Base = require('./driver/base'),\n Client = require('./driver/client'),\n Server = require('./driver/server');\n\nvar Driver = {\n client: function(url, options) {\n options = options || {};\n if (options.masking === undefined) options.masking = true;\n return new Client(url, options);\n },\n\n server: function(options) {\n options = options || {};\n if (options.requireMasking === undefined) options.requireMasking = true;\n return new Server(options);\n },\n\n http: function() {\n return Server.http.apply(Server, arguments);\n },\n\n isSecureRequest: function(request) {\n return Server.isSecureRequest(request);\n },\n\n isWebSocket: function(request) {\n return Base.isWebSocket(request);\n },\n\n validateOptions: function(options, validKeys) {\n Base.validateOptions(options, validKeys);\n }\n};\n\nmodule.exports = Driver;\n","module.exports = require(\"stream\");","module.exports = require(\"url\");","'use strict';\n\nvar Event = function(eventType, options) {\n this.type = eventType;\n for (var key in options)\n this[key] = options[key];\n};\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n this.type = eventType;\n this.bubbles = canBubble;\n this.cancelable = cancelable;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","'use strict';\n\nvar Headers = function() {\n this.clear();\n};\n\nHeaders.prototype.ALLOWED_DUPLICATES = ['set-cookie', 'set-cookie2', 'warning', 'www-authenticate'];\n\nHeaders.prototype.clear = function() {\n this._sent = {};\n this._lines = [];\n};\n\nHeaders.prototype.set = function(name, value) {\n if (value === undefined) return;\n\n name = this._strip(name);\n value = this._strip(value);\n\n var key = name.toLowerCase();\n if (!this._sent.hasOwnProperty(key) || this.ALLOWED_DUPLICATES.indexOf(key) >= 0) {\n this._sent[key] = true;\n this._lines.push(name + ': ' + value + '\\r\\n');\n }\n};\n\nHeaders.prototype.toString = function() {\n return this._lines.join('');\n};\n\nHeaders.prototype._strip = function(string) {\n return string.toString().replace(/^ */, '').replace(/ *$/, '');\n};\n\nmodule.exports = Headers;\n","'use strict';\n\nvar NodeHTTPParser = require('http-parser-js').HTTPParser,\n Buffer = require('safe-buffer').Buffer;\n\nvar TYPES = {\n request: NodeHTTPParser.REQUEST || 'request',\n response: NodeHTTPParser.RESPONSE || 'response'\n};\n\nvar HttpParser = function(type) {\n this._type = type;\n this._parser = new NodeHTTPParser(TYPES[type]);\n this._complete = false;\n this.headers = {};\n\n var current = null,\n self = this;\n\n this._parser.onHeaderField = function(b, start, length) {\n current = b.toString('utf8', start, start + length).toLowerCase();\n };\n\n this._parser.onHeaderValue = function(b, start, length) {\n var value = b.toString('utf8', start, start + length);\n\n if (self.headers.hasOwnProperty(current))\n self.headers[current] += ', ' + value;\n else\n self.headers[current] = value;\n };\n\n this._parser.onHeadersComplete = this._parser[NodeHTTPParser.kOnHeadersComplete] =\n function(majorVersion, minorVersion, headers, method, pathname, statusCode) {\n var info = arguments[0];\n\n if (typeof info === 'object') {\n method = info.method;\n pathname = info.url;\n statusCode = info.statusCode;\n headers = info.headers;\n }\n\n self.method = (typeof method === 'number') ? HttpParser.METHODS[method] : method;\n self.statusCode = statusCode;\n self.url = pathname;\n\n if (!headers) return;\n\n for (var i = 0, n = headers.length, key, value; i < n; i += 2) {\n key = headers[i].toLowerCase();\n value = headers[i+1];\n if (self.headers.hasOwnProperty(key))\n self.headers[key] += ', ' + value;\n else\n self.headers[key] = value;\n }\n\n self._complete = true;\n };\n};\n\nHttpParser.METHODS = {\n 0: 'DELETE',\n 1: 'GET',\n 2: 'HEAD',\n 3: 'POST',\n 4: 'PUT',\n 5: 'CONNECT',\n 6: 'OPTIONS',\n 7: 'TRACE',\n 8: 'COPY',\n 9: 'LOCK',\n 10: 'MKCOL',\n 11: 'MOVE',\n 12: 'PROPFIND',\n 13: 'PROPPATCH',\n 14: 'SEARCH',\n 15: 'UNLOCK',\n 16: 'BIND',\n 17: 'REBIND',\n 18: 'UNBIND',\n 19: 'ACL',\n 20: 'REPORT',\n 21: 'MKACTIVITY',\n 22: 'CHECKOUT',\n 23: 'MERGE',\n 24: 'M-SEARCH',\n 25: 'NOTIFY',\n 26: 'SUBSCRIBE',\n 27: 'UNSUBSCRIBE',\n 28: 'PATCH',\n 29: 'PURGE',\n 30: 'MKCALENDAR',\n 31: 'LINK',\n 32: 'UNLINK'\n};\n\nvar VERSION = process.version\n ? process.version.match(/[0-9]+/g).map(function(n) { return parseInt(n, 10) })\n : [];\n\nif (VERSION[0] === 0 && VERSION[1] === 12) {\n HttpParser.METHODS[16] = 'REPORT';\n HttpParser.METHODS[17] = 'MKACTIVITY';\n HttpParser.METHODS[18] = 'CHECKOUT';\n HttpParser.METHODS[19] = 'MERGE';\n HttpParser.METHODS[20] = 'M-SEARCH';\n HttpParser.METHODS[21] = 'NOTIFY';\n HttpParser.METHODS[22] = 'SUBSCRIBE';\n HttpParser.METHODS[23] = 'UNSUBSCRIBE';\n HttpParser.METHODS[24] = 'PATCH';\n HttpParser.METHODS[25] = 'PURGE';\n}\n\nHttpParser.prototype.isComplete = function() {\n return this._complete;\n};\n\nHttpParser.prototype.parse = function(chunk) {\n var consumed = this._parser.execute(chunk, 0, chunk.length);\n\n if (typeof consumed !== 'number') {\n this.error = consumed;\n this._complete = true;\n return;\n }\n\n if (this._complete)\n this.body = (consumed < chunk.length)\n ? chunk.slice(consumed)\n : Buffer.alloc(0);\n};\n\nmodule.exports = HttpParser;\n","'use strict';\n\nvar Stream = require('stream').Stream,\n util = require('util'),\n driver = require('websocket-driver'),\n EventTarget = require('./api/event_target'),\n Event = require('./api/event');\n\nvar API = function(options) {\n options = options || {};\n driver.validateOptions(options, ['headers', 'extensions', 'maxLength', 'ping', 'proxy', 'tls', 'ca']);\n\n this.readable = this.writable = true;\n\n var headers = options.headers;\n if (headers) {\n for (var name in headers) this._driver.setHeader(name, headers[name]);\n }\n\n var extensions = options.extensions;\n if (extensions) {\n [].concat(extensions).forEach(this._driver.addExtension, this._driver);\n }\n\n this._ping = options.ping;\n this._pingId = 0;\n this.readyState = API.CONNECTING;\n this.bufferedAmount = 0;\n this.protocol = '';\n this.url = this._driver.url;\n this.version = this._driver.version;\n\n var self = this;\n\n this._driver.on('open', function(e) { self._open() });\n this._driver.on('message', function(e) { self._receiveMessage(e.data) });\n this._driver.on('close', function(e) { self._beginClose(e.reason, e.code) });\n\n this._driver.on('error', function(error) {\n self._emitError(error.message);\n });\n this.on('error', function() {});\n\n this._driver.messages.on('drain', function() {\n self.emit('drain');\n });\n\n if (this._ping)\n this._pingTimer = setInterval(function() {\n self._pingId += 1;\n self.ping(self._pingId.toString());\n }, this._ping * 1000);\n\n this._configureStream();\n\n if (!this._proxy) {\n this._stream.pipe(this._driver.io);\n this._driver.io.pipe(this._stream);\n }\n};\nutil.inherits(API, Stream);\n\nAPI.CONNECTING = 0;\nAPI.OPEN = 1;\nAPI.CLOSING = 2;\nAPI.CLOSED = 3;\n\nAPI.CLOSE_TIMEOUT = 30000;\n\nvar instance = {\n write: function(data) {\n return this.send(data);\n },\n\n end: function(data) {\n if (data !== undefined) this.send(data);\n this.close();\n },\n\n pause: function() {\n return this._driver.messages.pause();\n },\n\n resume: function() {\n return this._driver.messages.resume();\n },\n\n send: function(data) {\n if (this.readyState > API.OPEN) return false;\n if (!(data instanceof Buffer)) data = String(data);\n return this._driver.messages.write(data);\n },\n\n ping: function(message, callback) {\n if (this.readyState > API.OPEN) return false;\n return this._driver.ping(message, callback);\n },\n\n close: function(code, reason) {\n if (code === undefined) code = 1000;\n if (reason === undefined) reason = '';\n\n if (code !== 1000 && (code < 3000 || code > 4999))\n throw new Error(\"Failed to execute 'close' on WebSocket: \" +\n \"The code must be either 1000, or between 3000 and 4999. \" +\n code + \" is neither.\");\n\n if (this.readyState !== API.CLOSED) this.readyState = API.CLOSING;\n var self = this;\n\n this._closeTimer = setTimeout(function() {\n self._beginClose('', 1006);\n }, API.CLOSE_TIMEOUT);\n\n this._driver.close(reason, code);\n },\n\n _configureStream: function() {\n var self = this;\n\n this._stream.setTimeout(0);\n this._stream.setNoDelay(true);\n\n ['close', 'end'].forEach(function(event) {\n this._stream.on(event, function() { self._finalizeClose() });\n }, this);\n\n this._stream.on('error', function(error) {\n self._emitError('Network error: ' + self.url + ': ' + error.message);\n self._finalizeClose();\n });\n },\n\n _open: function() {\n if (this.readyState !== API.CONNECTING) return;\n\n this.readyState = API.OPEN;\n this.protocol = this._driver.protocol || '';\n\n var event = new Event('open');\n event.initEvent('open', false, false);\n this.dispatchEvent(event);\n },\n\n _receiveMessage: function(data) {\n if (this.readyState > API.OPEN) return false;\n\n if (this.readable) this.emit('data', data);\n\n var event = new Event('message', {data: data});\n event.initEvent('message', false, false);\n this.dispatchEvent(event);\n },\n\n _emitError: function(message) {\n if (this.readyState >= API.CLOSING) return;\n\n var event = new Event('error', {message: message});\n event.initEvent('error', false, false);\n this.dispatchEvent(event);\n },\n\n _beginClose: function(reason, code) {\n if (this.readyState === API.CLOSED) return;\n this.readyState = API.CLOSING;\n this._closeParams = [reason, code];\n\n if (this._stream) {\n this._stream.destroy();\n if (!this._stream.readable) this._finalizeClose();\n }\n },\n\n _finalizeClose: function() {\n if (this.readyState === API.CLOSED) return;\n this.readyState = API.CLOSED;\n\n if (this._closeTimer) clearTimeout(this._closeTimer);\n if (this._pingTimer) clearInterval(this._pingTimer);\n if (this._stream) this._stream.end();\n\n if (this.readable) this.emit('end');\n this.readable = this.writable = false;\n\n var reason = this._closeParams ? this._closeParams[0] : '',\n code = this._closeParams ? this._closeParams[1] : 1006;\n\n var event = new Event('close', {code: code, reason: reason});\n event.initEvent('close', false, false);\n this.dispatchEvent(event);\n }\n};\n\nfor (var method in instance) API.prototype[method] = instance[method];\nfor (var key in EventTarget) API.prototype[key] = EventTarget[key];\n\nmodule.exports = API;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n crypto = require('crypto'),\n util = require('util'),\n Extensions = require('websocket-extensions'),\n Base = require('./base'),\n Frame = require('./hybi/frame'),\n Message = require('./hybi/message');\n\nvar Hybi = function(request, url, options) {\n Base.apply(this, arguments);\n\n this._extensions = new Extensions();\n this._stage = 0;\n this._masking = this._options.masking;\n this._protocols = this._options.protocols || [];\n this._requireMasking = this._options.requireMasking;\n this._pingCallbacks = {};\n\n if (typeof this._protocols === 'string')\n this._protocols = this._protocols.split(/ *, */);\n\n if (!this._request) return;\n\n var protos = this._request.headers['sec-websocket-protocol'],\n supported = this._protocols;\n\n if (protos !== undefined) {\n if (typeof protos === 'string') protos = protos.split(/ *, */);\n this.protocol = protos.filter(function(p) { return supported.indexOf(p) >= 0 })[0];\n }\n\n this.version = 'hybi-' + Hybi.VERSION;\n};\nutil.inherits(Hybi, Base);\n\nHybi.VERSION = '13';\n\nHybi.mask = function(payload, mask, offset) {\n if (!mask || mask.length === 0) return payload;\n offset = offset || 0;\n\n for (var i = 0, n = payload.length - offset; i < n; i++) {\n payload[offset + i] = payload[offset + i] ^ mask[i % 4];\n }\n return payload;\n};\n\nHybi.generateAccept = function(key) {\n var sha1 = crypto.createHash('sha1');\n sha1.update(key + Hybi.GUID);\n return sha1.digest('base64');\n};\n\nHybi.GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';\n\nvar instance = {\n FIN: 0x80,\n MASK: 0x80,\n RSV1: 0x40,\n RSV2: 0x20,\n RSV3: 0x10,\n OPCODE: 0x0F,\n LENGTH: 0x7F,\n\n OPCODES: {\n continuation: 0,\n text: 1,\n binary: 2,\n close: 8,\n ping: 9,\n pong: 10\n },\n\n OPCODE_CODES: [0, 1, 2, 8, 9, 10],\n MESSAGE_OPCODES: [0, 1, 2],\n OPENING_OPCODES: [1, 2],\n\n ERRORS: {\n normal_closure: 1000,\n going_away: 1001,\n protocol_error: 1002,\n unacceptable: 1003,\n encoding_error: 1007,\n policy_violation: 1008,\n too_large: 1009,\n extension_error: 1010,\n unexpected_condition: 1011\n },\n\n ERROR_CODES: [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011],\n DEFAULT_ERROR_CODE: 1000,\n MIN_RESERVED_ERROR: 3000,\n MAX_RESERVED_ERROR: 4999,\n\n // http://www.w3.org/International/questions/qa-forms-utf-8.en.php\n UTF8_MATCH: /^([\\x00-\\x7F]|[\\xC2-\\xDF][\\x80-\\xBF]|\\xE0[\\xA0-\\xBF][\\x80-\\xBF]|[\\xE1-\\xEC\\xEE\\xEF][\\x80-\\xBF]{2}|\\xED[\\x80-\\x9F][\\x80-\\xBF]|\\xF0[\\x90-\\xBF][\\x80-\\xBF]{2}|[\\xF1-\\xF3][\\x80-\\xBF]{3}|\\xF4[\\x80-\\x8F][\\x80-\\xBF]{2})*$/,\n\n addExtension: function(extension) {\n this._extensions.add(extension);\n return true;\n },\n\n parse: function(chunk) {\n this._reader.put(chunk);\n var buffer = true;\n while (buffer) {\n switch (this._stage) {\n case 0:\n buffer = this._reader.read(1);\n if (buffer) this._parseOpcode(buffer[0]);\n break;\n\n case 1:\n buffer = this._reader.read(1);\n if (buffer) this._parseLength(buffer[0]);\n break;\n\n case 2:\n buffer = this._reader.read(this._frame.lengthBytes);\n if (buffer) this._parseExtendedLength(buffer);\n break;\n\n case 3:\n buffer = this._reader.read(4);\n if (buffer) {\n this._stage = 4;\n this._frame.maskingKey = buffer;\n }\n break;\n\n case 4:\n buffer = this._reader.read(this._frame.length);\n if (buffer) {\n this._stage = 0;\n this._emitFrame(buffer);\n }\n break;\n\n default:\n buffer = null;\n }\n }\n },\n\n text: function(message) {\n if (this.readyState > 1) return false;\n return this.frame(message, 'text');\n },\n\n binary: function(message) {\n if (this.readyState > 1) return false;\n return this.frame(message, 'binary');\n },\n\n ping: function(message, callback) {\n if (this.readyState > 1) return false;\n message = message || '';\n if (callback) this._pingCallbacks[message] = callback;\n return this.frame(message, 'ping');\n },\n\n pong: function(message) {\n if (this.readyState > 1) return false;\n message = message ||'';\n return this.frame(message, 'pong');\n },\n\n close: function(reason, code) {\n reason = reason || '';\n code = code || this.ERRORS.normal_closure;\n\n if (this.readyState <= 0) {\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(code, reason));\n return true;\n } else if (this.readyState === 1) {\n this.readyState = 2;\n this._extensions.close(function() { this.frame(reason, 'close', code) }, this);\n return true;\n } else {\n return false;\n }\n },\n\n frame: function(buffer, type, code) {\n if (this.readyState <= 0) return this._queue([buffer, type, code]);\n if (this.readyState > 2) return false;\n\n if (buffer instanceof Array) buffer = Buffer.from(buffer);\n if (typeof buffer === 'number') buffer = buffer.toString();\n\n var message = new Message(),\n isText = (typeof buffer === 'string'),\n payload, copy;\n\n message.rsv1 = message.rsv2 = message.rsv3 = false;\n message.opcode = this.OPCODES[type || (isText ? 'text' : 'binary')];\n\n payload = isText ? Buffer.from(buffer, 'utf8') : buffer;\n\n if (code) {\n copy = payload;\n payload = Buffer.allocUnsafe(2 + copy.length);\n payload.writeUInt16BE(code, 0);\n copy.copy(payload, 2);\n }\n message.data = payload;\n\n var onMessageReady = function(message) {\n var frame = new Frame();\n\n frame.final = true;\n frame.rsv1 = message.rsv1;\n frame.rsv2 = message.rsv2;\n frame.rsv3 = message.rsv3;\n frame.opcode = message.opcode;\n frame.masked = !!this._masking;\n frame.length = message.data.length;\n frame.payload = message.data;\n\n if (frame.masked) frame.maskingKey = crypto.randomBytes(4);\n\n this._sendFrame(frame);\n };\n\n if (this.MESSAGE_OPCODES.indexOf(message.opcode) >= 0)\n this._extensions.processOutgoingMessage(message, function(error, message) {\n if (error) return this._fail('extension_error', error.message);\n onMessageReady.call(this, message);\n }, this);\n else\n onMessageReady.call(this, message);\n\n return true;\n },\n\n _sendFrame: function(frame) {\n var length = frame.length,\n header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10),\n offset = header + (frame.masked ? 4 : 0),\n buffer = Buffer.allocUnsafe(offset + length),\n masked = frame.masked ? this.MASK : 0;\n\n buffer[0] = (frame.final ? this.FIN : 0) |\n (frame.rsv1 ? this.RSV1 : 0) |\n (frame.rsv2 ? this.RSV2 : 0) |\n (frame.rsv3 ? this.RSV3 : 0) |\n frame.opcode;\n\n if (length <= 125) {\n buffer[1] = masked | length;\n } else if (length <= 65535) {\n buffer[1] = masked | 126;\n buffer.writeUInt16BE(length, 2);\n } else {\n buffer[1] = masked | 127;\n buffer.writeUInt32BE(Math.floor(length / 0x100000000), 2);\n buffer.writeUInt32BE(length % 0x100000000, 6);\n }\n\n frame.payload.copy(buffer, offset);\n\n if (frame.masked) {\n frame.maskingKey.copy(buffer, header);\n Hybi.mask(buffer, frame.maskingKey, offset);\n }\n\n this._write(buffer);\n },\n\n _handshakeResponse: function() {\n var secKey = this._request.headers['sec-websocket-key'],\n version = this._request.headers['sec-websocket-version'];\n\n if (version !== Hybi.VERSION)\n throw new Error('Unsupported WebSocket version: ' + version);\n\n if (typeof secKey !== 'string')\n throw new Error('Missing handshake request header: Sec-WebSocket-Key');\n\n this._headers.set('Upgrade', 'websocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey));\n\n if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol);\n\n var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']);\n if (extensions) this._headers.set('Sec-WebSocket-Extensions', extensions);\n\n var start = 'HTTP/1.1 101 Switching Protocols',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _shutdown: function(code, reason, error) {\n delete this._frame;\n delete this._message;\n this._stage = 5;\n\n var sendCloseFrame = (this.readyState === 1);\n this.readyState = 2;\n\n this._extensions.close(function() {\n if (sendCloseFrame) this.frame(reason, 'close', code);\n this.readyState = 3;\n if (error) this.emit('error', new Error(reason));\n this.emit('close', new Base.CloseEvent(code, reason));\n }, this);\n },\n\n _fail: function(type, message) {\n if (this.readyState > 1) return;\n this._shutdown(this.ERRORS[type], message, true);\n },\n\n _parseOpcode: function(octet) {\n var rsvs = [this.RSV1, this.RSV2, this.RSV3].map(function(rsv) {\n return (octet & rsv) === rsv;\n });\n\n var frame = this._frame = new Frame();\n\n frame.final = (octet & this.FIN) === this.FIN;\n frame.rsv1 = rsvs[0];\n frame.rsv2 = rsvs[1];\n frame.rsv3 = rsvs[2];\n frame.opcode = (octet & this.OPCODE);\n\n this._stage = 1;\n\n if (!this._extensions.validFrameRsv(frame))\n return this._fail('protocol_error',\n 'One or more reserved bits are on: reserved1 = ' + (frame.rsv1 ? 1 : 0) +\n ', reserved2 = ' + (frame.rsv2 ? 1 : 0) +\n ', reserved3 = ' + (frame.rsv3 ? 1 : 0));\n\n if (this.OPCODE_CODES.indexOf(frame.opcode) < 0)\n return this._fail('protocol_error', 'Unrecognized frame opcode: ' + frame.opcode);\n\n if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && !frame.final)\n return this._fail('protocol_error', 'Received fragmented control frame: opcode = ' + frame.opcode);\n\n if (this._message && this.OPENING_OPCODES.indexOf(frame.opcode) >= 0)\n return this._fail('protocol_error', 'Received new data frame but previous continuous frame is unfinished');\n },\n\n _parseLength: function(octet) {\n var frame = this._frame;\n frame.masked = (octet & this.MASK) === this.MASK;\n frame.length = (octet & this.LENGTH);\n\n if (frame.length >= 0 && frame.length <= 125) {\n this._stage = frame.masked ? 3 : 4;\n if (!this._checkFrameLength()) return;\n } else {\n this._stage = 2;\n frame.lengthBytes = (frame.length === 126 ? 2 : 8);\n }\n\n if (this._requireMasking && !frame.masked)\n return this._fail('unacceptable', 'Received unmasked frame but masking is required');\n },\n\n _parseExtendedLength: function(buffer) {\n var frame = this._frame;\n frame.length = this._readUInt(buffer);\n\n this._stage = frame.masked ? 3 : 4;\n\n if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && frame.length > 125)\n return this._fail('protocol_error', 'Received control frame having too long payload: ' + frame.length);\n\n if (!this._checkFrameLength()) return;\n },\n\n _checkFrameLength: function() {\n var length = this._message ? this._message.length : 0;\n\n if (length + this._frame.length > this._maxLength) {\n this._fail('too_large', 'WebSocket frame length too large');\n return false;\n } else {\n return true;\n }\n },\n\n _emitFrame: function(buffer) {\n var frame = this._frame,\n payload = frame.payload = Hybi.mask(buffer, frame.maskingKey),\n opcode = frame.opcode,\n message,\n code, reason,\n callbacks, callback;\n\n delete this._frame;\n\n if (opcode === this.OPCODES.continuation) {\n if (!this._message) return this._fail('protocol_error', 'Received unexpected continuation frame');\n this._message.pushFrame(frame);\n }\n\n if (opcode === this.OPCODES.text || opcode === this.OPCODES.binary) {\n this._message = new Message();\n this._message.pushFrame(frame);\n }\n\n if (frame.final && this.MESSAGE_OPCODES.indexOf(opcode) >= 0)\n return this._emitMessage(this._message);\n\n if (opcode === this.OPCODES.close) {\n code = (payload.length >= 2) ? payload.readUInt16BE(0) : null;\n reason = (payload.length > 2) ? this._encode(payload.slice(2)) : null;\n\n if (!(payload.length === 0) &&\n !(code !== null && code >= this.MIN_RESERVED_ERROR && code <= this.MAX_RESERVED_ERROR) &&\n this.ERROR_CODES.indexOf(code) < 0)\n code = this.ERRORS.protocol_error;\n\n if (payload.length > 125 || (payload.length > 2 && !reason))\n code = this.ERRORS.protocol_error;\n\n this._shutdown(code || this.DEFAULT_ERROR_CODE, reason || '');\n }\n\n if (opcode === this.OPCODES.ping) {\n this.frame(payload, 'pong');\n this.emit('ping', new Base.PingEvent(payload.toString()))\n }\n\n if (opcode === this.OPCODES.pong) {\n callbacks = this._pingCallbacks;\n message = this._encode(payload);\n callback = callbacks[message];\n\n delete callbacks[message];\n if (callback) callback()\n\n this.emit('pong', new Base.PongEvent(payload.toString()))\n }\n },\n\n _emitMessage: function(message) {\n var message = this._message;\n message.read();\n\n delete this._message;\n\n this._extensions.processIncomingMessage(message, function(error, message) {\n if (error) return this._fail('extension_error', error.message);\n\n var payload = message.data;\n if (message.opcode === this.OPCODES.text) payload = this._encode(payload);\n\n if (payload === null)\n return this._fail('encoding_error', 'Could not decode a text frame as UTF-8');\n else\n this.emit('message', new Base.MessageEvent(payload));\n }, this);\n },\n\n _encode: function(buffer) {\n try {\n var string = buffer.toString('binary', 0, buffer.length);\n if (!this.UTF8_MATCH.test(string)) return null;\n } catch (e) {}\n return buffer.toString('utf8', 0, buffer.length);\n },\n\n _readUInt: function(buffer) {\n if (buffer.length === 2) return buffer.readUInt16BE(0);\n\n return buffer.readUInt32BE(0) * 0x100000000 +\n buffer.readUInt32BE(4);\n }\n};\n\nfor (var key in instance)\n Hybi.prototype[key] = instance[key];\n\nmodule.exports = Hybi;\n","'use strict';\n\nvar RingBuffer = function(bufferSize) {\n this._bufferSize = bufferSize;\n this.clear();\n};\n\nRingBuffer.prototype.clear = function() {\n this._buffer = new Array(this._bufferSize);\n this._ringOffset = 0;\n this._ringSize = this._bufferSize;\n this._head = 0;\n this._tail = 0;\n this.length = 0;\n};\n\nRingBuffer.prototype.push = function(value) {\n var expandBuffer = false,\n expandRing = false;\n\n if (this._ringSize < this._bufferSize) {\n expandBuffer = (this._tail === 0);\n } else if (this._ringOffset === this._ringSize) {\n expandBuffer = true;\n expandRing = (this._tail === 0);\n }\n\n if (expandBuffer) {\n this._tail = this._bufferSize;\n this._buffer = this._buffer.concat(new Array(this._bufferSize));\n this._bufferSize = this._buffer.length;\n\n if (expandRing)\n this._ringSize = this._bufferSize;\n }\n\n this._buffer[this._tail] = value;\n this.length += 1;\n if (this._tail < this._ringSize) this._ringOffset += 1;\n this._tail = (this._tail + 1) % this._bufferSize;\n};\n\nRingBuffer.prototype.peek = function() {\n if (this.length === 0) return void 0;\n return this._buffer[this._head];\n};\n\nRingBuffer.prototype.shift = function() {\n if (this.length === 0) return void 0;\n\n var value = this._buffer[this._head];\n this._buffer[this._head] = void 0;\n this.length -= 1;\n this._ringOffset -= 1;\n\n if (this._ringOffset === 0 && this.length > 0) {\n this._head = this._ringSize;\n this._ringOffset = this.length;\n this._ringSize = this._bufferSize;\n } else {\n this._head = (this._head + 1) % this._ringSize;\n }\n return value;\n};\n\nmodule.exports = RingBuffer;\n","'use strict';\n\nvar RingBuffer = require('./ring_buffer');\n\nvar Pledge = function() {\n this._complete = false;\n this._callbacks = new RingBuffer(Pledge.QUEUE_SIZE);\n};\n\nPledge.QUEUE_SIZE = 4;\n\nPledge.all = function(list) {\n var pledge = new Pledge(),\n pending = list.length,\n n = pending;\n\n if (pending === 0) pledge.done();\n\n while (n--) list[n].then(function() {\n pending -= 1;\n if (pending === 0) pledge.done();\n });\n return pledge;\n};\n\nPledge.prototype.then = function(callback) {\n if (this._complete) callback();\n else this._callbacks.push(callback);\n};\n\nPledge.prototype.done = function() {\n this._complete = true;\n var callbacks = this._callbacks, callback;\n while (callback = callbacks.shift()) callback();\n};\n\nmodule.exports = Pledge;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Base = require('./base'),\n util = require('util');\n\nvar Draft75 = function(request, url, options) {\n Base.apply(this, arguments);\n this._stage = 0;\n this.version = 'hixie-75';\n\n this._headers.set('Upgrade', 'WebSocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('WebSocket-Origin', this._request.headers.origin);\n this._headers.set('WebSocket-Location', this.url);\n};\nutil.inherits(Draft75, Base);\n\nvar instance = {\n close: function() {\n if (this.readyState === 3) return false;\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n parse: function(chunk) {\n if (this.readyState > 1) return;\n\n this._reader.put(chunk);\n\n this._reader.eachByte(function(octet) {\n var message;\n\n switch (this._stage) {\n case -1:\n this._body.push(octet);\n this._sendHandshakeBody();\n break;\n\n case 0:\n this._parseLeadingByte(octet);\n break;\n\n case 1:\n this._length = (octet & 0x7F) + 128 * this._length;\n\n if (this._closing && this._length === 0) {\n return this.close();\n }\n else if ((octet & 0x80) !== 0x80) {\n if (this._length === 0) {\n this._stage = 0;\n }\n else {\n this._skipped = 0;\n this._stage = 2;\n }\n }\n break;\n\n case 2:\n if (octet === 0xFF) {\n this._stage = 0;\n message = Buffer.from(this._buffer).toString('utf8', 0, this._buffer.length);\n this.emit('message', new Base.MessageEvent(message));\n }\n else {\n if (this._length) {\n this._skipped += 1;\n if (this._skipped === this._length)\n this._stage = 0;\n } else {\n this._buffer.push(octet);\n if (this._buffer.length > this._maxLength) return this.close();\n }\n }\n break;\n }\n }, this);\n },\n\n frame: function(buffer) {\n if (this.readyState === 0) return this._queue([buffer]);\n if (this.readyState > 1) return false;\n\n if (typeof buffer !== 'string') buffer = buffer.toString();\n\n var length = Buffer.byteLength(buffer),\n frame = Buffer.allocUnsafe(length + 2);\n\n frame[0] = 0x00;\n frame.write(buffer, 1);\n frame[frame.length - 1] = 0xFF;\n\n this._write(frame);\n return true;\n },\n\n _handshakeResponse: function() {\n var start = 'HTTP/1.1 101 Web Socket Protocol Handshake',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _parseLeadingByte: function(octet) {\n if ((octet & 0x80) === 0x80) {\n this._length = 0;\n this._stage = 1;\n } else {\n delete this._length;\n delete this._skipped;\n this._buffer = [];\n this._stage = 2;\n }\n }\n};\n\nfor (var key in instance)\n Draft75.prototype[key] = instance[key];\n\nmodule.exports = Draft75;\n","'use strict';\n\nvar Event = require('./event');\n\nvar EventTarget = {\n onopen: null,\n onmessage: null,\n onerror: null,\n onclose: null,\n\n addEventListener: function(eventType, listener, useCapture) {\n this.on(eventType, listener);\n },\n\n removeEventListener: function(eventType, listener, useCapture) {\n this.removeListener(eventType, listener);\n },\n\n dispatchEvent: function(event) {\n event.target = event.currentTarget = this;\n event.eventPhase = Event.AT_TARGET;\n\n if (this['on' + event.type])\n this['on' + event.type](event);\n\n this.emit(event.type, event);\n }\n};\n\nmodule.exports = EventTarget;\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// API references:\n//\n// * https://html.spec.whatwg.org/multipage/comms.html#network\n// * https://dom.spec.whatwg.org/#interface-eventtarget\n// * https://dom.spec.whatwg.org/#interface-event\n\n'use strict';\n\nvar util = require('util'),\n driver = require('websocket-driver'),\n API = require('./websocket/api');\n\nvar WebSocket = function(request, socket, body, protocols, options) {\n options = options || {};\n\n this._stream = socket;\n this._driver = driver.http(request, {maxLength: options.maxLength, protocols: protocols});\n\n var self = this;\n if (!this._stream || !this._stream.writable) return;\n if (!this._stream.readable) return this._stream.end();\n\n var catchup = function() { self._stream.removeListener('data', catchup) };\n this._stream.on('data', catchup);\n\n API.call(this, options);\n\n process.nextTick(function() {\n self._driver.start();\n self._driver.io.write(body);\n });\n};\nutil.inherits(WebSocket, API);\n\nWebSocket.isWebSocket = function(request) {\n return driver.isWebSocket(request);\n};\n\nWebSocket.validateOptions = function(options, validKeys) {\n driver.validateOptions(options, validKeys);\n};\n\nWebSocket.WebSocket = WebSocket;\nWebSocket.Client = require('./websocket/client');\nWebSocket.EventSource = require('./eventsource');\n\nmodule.exports = WebSocket;\n","/**\n * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object.\n *\n * This can be used with JS designed for browsers to improve reuse of code and\n * allow the use of existing libraries.\n *\n * Usage: include(\"XMLHttpRequest.js\") and use XMLHttpRequest per W3C specs.\n *\n * @author Dan DeFelippi \n * @contributor David Ellis \n * @license MIT\n */\n\nvar Url = require(\"url\");\nvar spawn = require(\"child_process\").spawn;\nvar fs = require(\"fs\");\n\nexports.XMLHttpRequest = function() {\n \"use strict\";\n\n /**\n * Private variables\n */\n var self = this;\n var http = require(\"http\");\n var https = require(\"https\");\n\n // Holds http.js objects\n var request;\n var response;\n\n // Request settings\n var settings = {};\n\n // Disable header blacklist.\n // Not part of XHR specs.\n var disableHeaderCheck = false;\n\n // Set some default headers\n var defaultHeaders = {\n \"User-Agent\": \"node-XMLHttpRequest\",\n \"Accept\": \"*/*\",\n };\n\n var headers = {};\n var headersCase = {};\n\n // These headers are not user setable.\n // The following are allowed but banned in the spec:\n // * user-agent\n var forbiddenRequestHeaders = [\n \"accept-charset\",\n \"accept-encoding\",\n \"access-control-request-headers\",\n \"access-control-request-method\",\n \"connection\",\n \"content-length\",\n \"content-transfer-encoding\",\n \"cookie\",\n \"cookie2\",\n \"date\",\n \"expect\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"referer\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"via\"\n ];\n\n // These request methods are not allowed\n var forbiddenRequestMethods = [\n \"TRACE\",\n \"TRACK\",\n \"CONNECT\"\n ];\n\n // Send flag\n var sendFlag = false;\n // Error flag, used when errors occur or abort is called\n var errorFlag = false;\n\n // Event listeners\n var listeners = {};\n\n /**\n * Constants\n */\n\n this.UNSENT = 0;\n this.OPENED = 1;\n this.HEADERS_RECEIVED = 2;\n this.LOADING = 3;\n this.DONE = 4;\n\n /**\n * Public vars\n */\n\n // Current state\n this.readyState = this.UNSENT;\n\n // default ready state change handler in case one is not set or is set late\n this.onreadystatechange = null;\n\n // Result & response\n this.responseText = \"\";\n this.responseXML = \"\";\n this.status = null;\n this.statusText = null;\n \n // Whether cross-site Access-Control requests should be made using\n // credentials such as cookies or authorization headers\n this.withCredentials = false;\n\n /**\n * Private methods\n */\n\n /**\n * Check if the specified header is allowed.\n *\n * @param string header Header to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpHeader = function(header) {\n return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1);\n };\n\n /**\n * Check if the specified method is allowed.\n *\n * @param string method Request method to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpMethod = function(method) {\n return (method && forbiddenRequestMethods.indexOf(method) === -1);\n };\n\n /**\n * Public methods\n */\n\n /**\n * Open the connection. Currently supports local server requests.\n *\n * @param string method Connection method (eg GET, POST)\n * @param string url URL for the connection.\n * @param boolean async Asynchronous connection. Default is true.\n * @param string user Username for basic authentication (optional)\n * @param string password Password for basic authentication (optional)\n */\n this.open = function(method, url, async, user, password) {\n this.abort();\n errorFlag = false;\n\n // Check for valid request method\n if (!isAllowedHttpMethod(method)) {\n throw new Error(\"SecurityError: Request method not allowed\");\n }\n\n settings = {\n \"method\": method,\n \"url\": url.toString(),\n \"async\": (typeof async !== \"boolean\" ? true : async),\n \"user\": user || null,\n \"password\": password || null\n };\n\n setState(this.OPENED);\n };\n\n /**\n * Disables or enables isAllowedHttpHeader() check the request. Enabled by default.\n * This does not conform to the W3C spec.\n *\n * @param boolean state Enable or disable header checking.\n */\n this.setDisableHeaderCheck = function(state) {\n disableHeaderCheck = state;\n };\n\n /**\n * Sets a header for the request or appends the value if one is already set.\n *\n * @param string header Header name\n * @param string value Header value\n */\n this.setRequestHeader = function(header, value) {\n if (this.readyState !== this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN\");\n }\n if (!isAllowedHttpHeader(header)) {\n console.warn(\"Refused to set unsafe header \\\"\" + header + \"\\\"\");\n return;\n }\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send flag is true\");\n }\n header = headersCase[header.toLowerCase()] || header;\n headersCase[header.toLowerCase()] = header;\n headers[header] = headers[header] ? headers[header] + ', ' + value : value;\n };\n\n /**\n * Gets a header from the server response.\n *\n * @param string header Name of header to get.\n * @return string Text of the header or null if it doesn't exist.\n */\n this.getResponseHeader = function(header) {\n if (typeof header === \"string\"\n && this.readyState > this.OPENED\n && response\n && response.headers\n && response.headers[header.toLowerCase()]\n && !errorFlag\n ) {\n return response.headers[header.toLowerCase()];\n }\n\n return null;\n };\n\n /**\n * Gets all the response headers.\n *\n * @return string A string with all response headers separated by CR+LF\n */\n this.getAllResponseHeaders = function() {\n if (this.readyState < this.HEADERS_RECEIVED || errorFlag) {\n return \"\";\n }\n var result = \"\";\n\n for (var i in response.headers) {\n // Cookie headers are excluded\n if (i !== \"set-cookie\" && i !== \"set-cookie2\") {\n result += i + \": \" + response.headers[i] + \"\\r\\n\";\n }\n }\n return result.substr(0, result.length - 2);\n };\n\n /**\n * Gets a request header\n *\n * @param string name Name of header to get\n * @return string Returns the request header or empty string if not set\n */\n this.getRequestHeader = function(name) {\n if (typeof name === \"string\" && headersCase[name.toLowerCase()]) {\n return headers[headersCase[name.toLowerCase()]];\n }\n\n return \"\";\n };\n\n /**\n * Sends the request to the server.\n *\n * @param string data Optional data to send as request body.\n */\n this.send = function(data) {\n if (this.readyState !== this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: connection must be opened before send() is called\");\n }\n\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send has already been called\");\n }\n\n var ssl = false, local = false;\n var url = Url.parse(settings.url);\n var host;\n // Determine the server\n switch (url.protocol) {\n case \"https:\":\n ssl = true;\n // SSL & non-SSL both need host, no break here.\n case \"http:\":\n host = url.hostname;\n break;\n\n case \"file:\":\n local = true;\n break;\n\n case undefined:\n case null:\n case \"\":\n host = \"localhost\";\n break;\n\n default:\n throw new Error(\"Protocol not supported.\");\n }\n\n // Load files off the local filesystem (file://)\n if (local) {\n if (settings.method !== \"GET\") {\n throw new Error(\"XMLHttpRequest: Only GET method is supported\");\n }\n\n if (settings.async) {\n fs.readFile(url.pathname, \"utf8\", function(error, data) {\n if (error) {\n self.handleError(error);\n } else {\n self.status = 200;\n self.responseText = data;\n setState(self.DONE);\n }\n });\n } else {\n try {\n this.responseText = fs.readFileSync(url.pathname, \"utf8\");\n this.status = 200;\n setState(self.DONE);\n } catch(e) {\n this.handleError(e);\n }\n }\n\n return;\n }\n\n // Default to port 80. If accessing localhost on another port be sure\n // to use http://localhost:port/path\n var port = url.port || (ssl ? 443 : 80);\n // Add query string if one is used\n var uri = url.pathname + (url.search ? url.search : \"\");\n\n // Set the defaults if they haven't been set\n for (var name in defaultHeaders) {\n if (!headersCase[name.toLowerCase()]) {\n headers[name] = defaultHeaders[name];\n }\n }\n\n // Set the Host header or the server may reject the request\n headers.Host = host;\n if (!((ssl && port === 443) || port === 80)) {\n headers.Host += \":\" + url.port;\n }\n\n // Set Basic Auth if necessary\n if (settings.user) {\n if (typeof settings.password === \"undefined\") {\n settings.password = \"\";\n }\n var authBuf = new Buffer(settings.user + \":\" + settings.password);\n headers.Authorization = \"Basic \" + authBuf.toString(\"base64\");\n }\n\n // Set content length header\n if (settings.method === \"GET\" || settings.method === \"HEAD\") {\n data = null;\n } else if (data) {\n headers[\"Content-Length\"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);\n\n if (!headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\n }\n } else if (settings.method === \"POST\") {\n // For a post with no data set Content-Length: 0.\n // This is required by buggy servers that don't meet the specs.\n headers[\"Content-Length\"] = 0;\n }\n\n var options = {\n host: host,\n port: port,\n path: uri,\n method: settings.method,\n headers: headers,\n agent: false,\n withCredentials: self.withCredentials\n };\n\n // Reset error flag\n errorFlag = false;\n\n // Handle async requests\n if (settings.async) {\n // Use the proper protocol\n var doRequest = ssl ? https.request : http.request;\n\n // Request is being sent, set send flag\n sendFlag = true;\n\n // As per spec, this is called here for historical reasons.\n self.dispatchEvent(\"readystatechange\");\n\n // Handler for the response\n var responseHandler = function responseHandler(resp) {\n // Set response var to the response we got back\n // This is so it remains accessable outside this scope\n response = resp;\n // Check for redirect\n // @TODO Prevent looped redirects\n if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n // Change URL to the redirect location\n settings.url = response.headers.location;\n var url = Url.parse(settings.url);\n // Set host var in case it's used later\n host = url.hostname;\n // Options for the new request\n var newOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.path,\n method: response.statusCode === 303 ? \"GET\" : settings.method,\n headers: headers,\n withCredentials: self.withCredentials\n };\n\n // Issue the new request\n request = doRequest(newOptions, responseHandler).on(\"error\", errorHandler);\n request.end();\n // @TODO Check if an XHR event needs to be fired here\n return;\n }\n\n response.setEncoding(\"utf8\");\n\n setState(self.HEADERS_RECEIVED);\n self.status = response.statusCode;\n\n response.on(\"data\", function(chunk) {\n // Make sure there's some data\n if (chunk) {\n self.responseText += chunk;\n }\n // Don't emit state changes if the connection has been aborted.\n if (sendFlag) {\n setState(self.LOADING);\n }\n });\n\n response.on(\"end\", function() {\n if (sendFlag) {\n // Discard the end event if the connection has been aborted\n setState(self.DONE);\n sendFlag = false;\n }\n });\n\n response.on(\"error\", function(error) {\n self.handleError(error);\n });\n };\n\n // Error handler for the request\n var errorHandler = function errorHandler(error) {\n self.handleError(error);\n };\n\n // Create the request\n request = doRequest(options, responseHandler).on(\"error\", errorHandler);\n\n // Node 0.4 and later won't accept empty data. Make sure it's needed.\n if (data) {\n request.write(data);\n }\n\n request.end();\n\n self.dispatchEvent(\"loadstart\");\n } else { // Synchronous\n // Create a temporary file for communication with the other Node process\n var contentFile = \".node-xmlhttprequest-content-\" + process.pid;\n var syncFile = \".node-xmlhttprequest-sync-\" + process.pid;\n fs.writeFileSync(syncFile, \"\", \"utf8\");\n // The async request the other Node process executes\n var execString = \"var http = require('http'), https = require('https'), fs = require('fs');\"\n + \"var doRequest = http\" + (ssl ? \"s\" : \"\") + \".request;\"\n + \"var options = \" + JSON.stringify(options) + \";\"\n + \"var responseText = '';\"\n + \"var req = doRequest(options, function(response) {\"\n + \"response.setEncoding('utf8');\"\n + \"response.on('data', function(chunk) {\"\n + \" responseText += chunk;\"\n + \"});\"\n + \"response.on('end', function() {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText}}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"response.on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: error}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"}).on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: error}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + (data ? \"req.write('\" + JSON.stringify(data).slice(1,-1).replace(/'/g, \"\\\\'\") + \"');\":\"\")\n + \"req.end();\";\n // Start the other Node Process, executing this string\n var syncProc = spawn(process.argv[0], [\"-e\", execString]);\n while(fs.existsSync(syncFile)) {\n // Wait while the sync file is empty\n }\n var resp = JSON.parse(fs.readFileSync(contentFile, 'utf8'));\n // Kill the child process once the file has data\n syncProc.stdin.end();\n // Remove the temporary file\n fs.unlinkSync(contentFile);\n\n if (resp.err) {\n self.handleError(resp.err);\n } else {\n response = resp.data;\n self.status = resp.data.statusCode;\n self.responseText = resp.data.text;\n setState(self.DONE);\n }\n }\n };\n\n /**\n * Called when an error is encountered to deal with it.\n */\n this.handleError = function(error) {\n this.status = 0;\n this.statusText = error;\n this.responseText = error.stack;\n errorFlag = true;\n setState(this.DONE);\n this.dispatchEvent('error');\n };\n\n /**\n * Aborts a request.\n */\n this.abort = function() {\n if (request) {\n request.abort();\n request = null;\n }\n\n headers = defaultHeaders;\n this.status = 0;\n this.responseText = \"\";\n this.responseXML = \"\";\n\n errorFlag = true;\n\n if (this.readyState !== this.UNSENT\n && (this.readyState !== this.OPENED || sendFlag)\n && this.readyState !== this.DONE) {\n sendFlag = false;\n setState(this.DONE);\n }\n this.readyState = this.UNSENT;\n this.dispatchEvent('abort');\n };\n\n /**\n * Adds an event listener. Preferred method of binding to events.\n */\n this.addEventListener = function(event, callback) {\n if (!(event in listeners)) {\n listeners[event] = [];\n }\n // Currently allows duplicate callbacks. Should it?\n listeners[event].push(callback);\n };\n\n /**\n * Remove an event callback that has already been bound.\n * Only works on the matching funciton, cannot be a copy.\n */\n this.removeEventListener = function(event, callback) {\n if (event in listeners) {\n // Filter will return a new array with the callback removed\n listeners[event] = listeners[event].filter(function(ev) {\n return ev !== callback;\n });\n }\n };\n\n /**\n * Dispatch any events, including both \"on\" methods and events attached using addEventListener.\n */\n this.dispatchEvent = function(event) {\n if (typeof self[\"on\" + event] === \"function\") {\n self[\"on\" + event]();\n }\n if (event in listeners) {\n for (var i = 0, len = listeners[event].length; i < len; i++) {\n listeners[event][i].call(self);\n }\n }\n };\n\n /**\n * Changes readyState and calls onreadystatechange.\n *\n * @param int state New state\n */\n var setState = function(state) {\n if (state == self.LOADING || self.readyState !== state) {\n self.readyState = state;\n\n if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) {\n self.dispatchEvent(\"readystatechange\");\n }\n\n if (self.readyState === self.DONE && !errorFlag) {\n self.dispatchEvent(\"load\");\n // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)\n self.dispatchEvent(\"loadend\");\n }\n }\n };\n};\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","module.exports = require(\"buffer\");","module.exports = require(\"events\");","'use strict';\n\n/**\n\nStreams in a WebSocket connection\n---------------------------------\n\nWe model a WebSocket as two duplex streams: one stream is for the wire protocol\nover an I/O socket, and the other is for incoming/outgoing messages.\n\n\n +----------+ +---------+ +----------+\n [1] write(chunk) -->| ~~~~~~~~ +----->| parse() +----->| ~~~~~~~~ +--> emit('data') [2]\n | | +----+----+ | |\n | | | | |\n | IO | | [5] | Messages |\n | | V | |\n | | +---------+ | |\n [4] emit('data') <--+ ~~~~~~~~ |<-----+ frame() |<-----+ ~~~~~~~~ |<-- write(chunk) [3]\n +----------+ +---------+ +----------+\n\n\nMessage transfer in each direction is simple: IO receives a byte stream [1] and\nsends this stream for parsing. The parser will periodically emit a complete\nmessage text on the Messages stream [2]. Similarly, when messages are written\nto the Messages stream [3], they are framed using the WebSocket wire format and\nemitted via IO [4].\n\nThere is a feedback loop via [5] since some input from [1] will be things like\nping, pong and close frames. In these cases the protocol responds by emitting\nresponses directly back to [4] rather than emitting messages via [2].\n\nFor the purposes of flow control, we consider the sources of each Readable\nstream to be as follows:\n\n* [2] receives input from [1]\n* [4] receives input from [1] and [3]\n\nThe classes below express the relationships described above without prescribing\nanything about how parse() and frame() work, other than assuming they emit\n'data' events to the IO and Messages streams. They will work with any protocol\ndriver having these two methods.\n**/\n\n\nvar Stream = require('stream').Stream,\n util = require('util');\n\n\nvar IO = function(driver) {\n this.readable = this.writable = true;\n this._paused = false;\n this._driver = driver;\n};\nutil.inherits(IO, Stream);\n\n// The IO pause() and resume() methods will be called when the socket we are\n// piping to gets backed up and drains. Since IO output [4] comes from IO input\n// [1] and Messages input [3], we need to tell both of those to return false\n// from write() when this stream is paused.\n\nIO.prototype.pause = function() {\n this._paused = true;\n this._driver.messages._paused = true;\n};\n\nIO.prototype.resume = function() {\n this._paused = false;\n this.emit('drain');\n\n var messages = this._driver.messages;\n messages._paused = false;\n messages.emit('drain');\n};\n\n// When we receive input from a socket, send it to the parser and tell the\n// source whether to back off.\nIO.prototype.write = function(chunk) {\n if (!this.writable) return false;\n this._driver.parse(chunk);\n return !this._paused;\n};\n\n// The IO end() method will be called when the socket piping into it emits\n// 'close' or 'end', i.e. the socket is closed. In this situation the Messages\n// stream will not emit any more data so we emit 'end'.\nIO.prototype.end = function(chunk) {\n if (!this.writable) return;\n if (chunk !== undefined) this.write(chunk);\n this.writable = false;\n\n var messages = this._driver.messages;\n if (messages.readable) {\n messages.readable = messages.writable = false;\n messages.emit('end');\n }\n};\n\nIO.prototype.destroy = function() {\n this.end();\n};\n\n\nvar Messages = function(driver) {\n this.readable = this.writable = true;\n this._paused = false;\n this._driver = driver;\n};\nutil.inherits(Messages, Stream);\n\n// The Messages pause() and resume() methods will be called when the app that's\n// processing the messages gets backed up and drains. If we're emitting\n// messages too fast we should tell the source to slow down. Message output [2]\n// comes from IO input [1].\n\nMessages.prototype.pause = function() {\n this._driver.io._paused = true;\n};\n\nMessages.prototype.resume = function() {\n this._driver.io._paused = false;\n this._driver.io.emit('drain');\n};\n\n// When we receive messages from the user, send them to the formatter and tell\n// the source whether to back off.\nMessages.prototype.write = function(message) {\n if (!this.writable) return false;\n if (typeof message === 'string') this._driver.text(message);\n else this._driver.binary(message);\n return !this._paused;\n};\n\n// The Messages end() method will be called when a stream piping into it emits\n// 'end'. Many streams may be piped into the WebSocket and one of them ending\n// does not mean the whole socket is done, so just process the input and move\n// on leaving the socket open.\nMessages.prototype.end = function(message) {\n if (message !== undefined) this.write(message);\n};\n\nMessages.prototype.destroy = function() {};\n\n\nexports.IO = IO;\nexports.Messages = Messages;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar StreamReader = function() {\n this._queue = [];\n this._queueSize = 0;\n this._offset = 0;\n};\n\nStreamReader.prototype.put = function(buffer) {\n if (!buffer || buffer.length === 0) return;\n if (!Buffer.isBuffer(buffer)) buffer = Buffer.from(buffer);\n this._queue.push(buffer);\n this._queueSize += buffer.length;\n};\n\nStreamReader.prototype.read = function(length) {\n if (length > this._queueSize) return null;\n if (length === 0) return Buffer.alloc(0);\n\n this._queueSize -= length;\n\n var queue = this._queue,\n remain = length,\n first = queue[0],\n buffers, buffer;\n\n if (first.length >= length) {\n if (first.length === length) {\n return queue.shift();\n } else {\n buffer = first.slice(0, length);\n queue[0] = first.slice(length);\n return buffer;\n }\n }\n\n for (var i = 0, n = queue.length; i < n; i++) {\n if (remain < queue[i].length) break;\n remain -= queue[i].length;\n }\n buffers = queue.splice(0, i);\n\n if (remain > 0 && queue.length > 0) {\n buffers.push(queue[0].slice(0, remain));\n queue[0] = queue[0].slice(remain);\n }\n return Buffer.concat(buffers, length);\n};\n\nStreamReader.prototype.eachByte = function(callback, context) {\n var buffer, n, index;\n\n while (this._queue.length > 0) {\n buffer = this._queue[0];\n n = buffer.length;\n\n while (this._offset < n) {\n index = this._offset;\n this._offset += 1;\n callback.call(context, buffer[index]);\n }\n this._offset = 0;\n this._queue.shift();\n }\n};\n\nmodule.exports = StreamReader;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n crypto = require('crypto'),\n url = require('url'),\n util = require('util'),\n HttpParser = require('../http_parser'),\n Base = require('./base'),\n Hybi = require('./hybi'),\n Proxy = require('./proxy');\n\nvar Client = function(_url, options) {\n this.version = 'hybi-' + Hybi.VERSION;\n Hybi.call(this, null, _url, options);\n\n this.readyState = -1;\n this._key = Client.generateKey();\n this._accept = Hybi.generateAccept(this._key);\n this._http = new HttpParser('response');\n\n var uri = url.parse(this.url),\n auth = uri.auth && Buffer.from(uri.auth, 'utf8').toString('base64');\n\n if (this.VALID_PROTOCOLS.indexOf(uri.protocol) < 0)\n throw new Error(this.url + ' is not a valid WebSocket URL');\n\n this._pathname = (uri.pathname || '/') + (uri.search || '');\n\n this._headers.set('Host', uri.host);\n this._headers.set('Upgrade', 'websocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Key', this._key);\n this._headers.set('Sec-WebSocket-Version', Hybi.VERSION);\n\n if (this._protocols.length > 0)\n this._headers.set('Sec-WebSocket-Protocol', this._protocols.join(', '));\n\n if (auth)\n this._headers.set('Authorization', 'Basic ' + auth);\n};\nutil.inherits(Client, Hybi);\n\nClient.generateKey = function() {\n return crypto.randomBytes(16).toString('base64');\n};\n\nvar instance = {\n VALID_PROTOCOLS: ['ws:', 'wss:'],\n\n proxy: function(origin, options) {\n return new Proxy(this, origin, options);\n },\n\n start: function() {\n if (this.readyState !== -1) return false;\n this._write(this._handshakeRequest());\n this.readyState = 0;\n return true;\n },\n\n parse: function(chunk) {\n if (this.readyState === 3) return;\n if (this.readyState > 0) return Hybi.prototype.parse.call(this, chunk);\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return;\n\n this._validateHandshake();\n if (this.readyState === 3) return;\n\n this._open();\n this.parse(this._http.body);\n },\n\n _handshakeRequest: function() {\n var extensions = this._extensions.generateOffer();\n if (extensions)\n this._headers.set('Sec-WebSocket-Extensions', extensions);\n\n var start = 'GET ' + this._pathname + ' HTTP/1.1',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _failHandshake: function(message) {\n message = 'Error during WebSocket handshake: ' + message;\n this.readyState = 3;\n this.emit('error', new Error(message));\n this.emit('close', new Base.CloseEvent(this.ERRORS.protocol_error, message));\n },\n\n _validateHandshake: function() {\n this.statusCode = this._http.statusCode;\n this.headers = this._http.headers;\n\n if (this._http.error)\n return this._failHandshake(this._http.error.message);\n\n if (this._http.statusCode !== 101)\n return this._failHandshake('Unexpected response code: ' + this._http.statusCode);\n\n var headers = this._http.headers,\n upgrade = headers['upgrade'] || '',\n connection = headers['connection'] || '',\n accept = headers['sec-websocket-accept'] || '',\n protocol = headers['sec-websocket-protocol'] || '';\n\n if (upgrade === '')\n return this._failHandshake(\"'Upgrade' header is missing\");\n if (upgrade.toLowerCase() !== 'websocket')\n return this._failHandshake(\"'Upgrade' header value is not 'WebSocket'\");\n\n if (connection === '')\n return this._failHandshake(\"'Connection' header is missing\");\n if (connection.toLowerCase() !== 'upgrade')\n return this._failHandshake(\"'Connection' header value is not 'Upgrade'\");\n\n if (accept !== this._accept)\n return this._failHandshake('Sec-WebSocket-Accept mismatch');\n\n this.protocol = null;\n\n if (protocol !== '') {\n if (this._protocols.indexOf(protocol) < 0)\n return this._failHandshake('Sec-WebSocket-Protocol mismatch');\n else\n this.protocol = protocol;\n }\n\n try {\n this._extensions.activate(this.headers['sec-websocket-extensions']);\n } catch (e) {\n return this._failHandshake(e.message);\n }\n }\n};\n\nfor (var key in instance)\n Client.prototype[key] = instance[key];\n\nmodule.exports = Client;\n","/*jshint node:true */\n\nvar assert = require('assert');\n\nexports.HTTPParser = HTTPParser;\nfunction HTTPParser(type) {\n assert.ok(type === HTTPParser.REQUEST || type === HTTPParser.RESPONSE || type === undefined);\n if (type === undefined) {\n // Node v12+\n } else {\n this.initialize(type);\n }\n this.maxHeaderSize=HTTPParser.maxHeaderSize\n}\nHTTPParser.prototype.initialize = function (type, async_resource) {\n assert.ok(type === HTTPParser.REQUEST || type === HTTPParser.RESPONSE);\n this.type = type;\n this.state = type + '_LINE';\n this.info = {\n headers: [],\n upgrade: false\n };\n this.trailers = [];\n this.line = '';\n this.isChunked = false;\n this.connection = '';\n this.headerSize = 0; // for preventing too big headers\n this.body_bytes = null;\n this.isUserCall = false;\n this.hadError = false;\n};\n\nHTTPParser.encoding = 'ascii';\nHTTPParser.maxHeaderSize = 80 * 1024; // maxHeaderSize (in bytes) is configurable, but 80kb by default;\nHTTPParser.REQUEST = 'REQUEST';\nHTTPParser.RESPONSE = 'RESPONSE';\n\n// Note: *not* starting with kOnHeaders=0 line the Node parser, because any\n// newly added constants (kOnTimeout in Node v12.19.0) will overwrite 0!\nvar kOnHeaders = HTTPParser.kOnHeaders = 1;\nvar kOnHeadersComplete = HTTPParser.kOnHeadersComplete = 2;\nvar kOnBody = HTTPParser.kOnBody = 3;\nvar kOnMessageComplete = HTTPParser.kOnMessageComplete = 4;\n\n// Some handler stubs, needed for compatibility\nHTTPParser.prototype[kOnHeaders] =\nHTTPParser.prototype[kOnHeadersComplete] =\nHTTPParser.prototype[kOnBody] =\nHTTPParser.prototype[kOnMessageComplete] = function () {};\n\nvar compatMode0_12 = true;\nObject.defineProperty(HTTPParser, 'kOnExecute', {\n get: function () {\n // hack for backward compatibility\n compatMode0_12 = false;\n return 99;\n }\n });\n\nvar methods = exports.methods = HTTPParser.methods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'POST',\n 'PUT',\n 'CONNECT',\n 'OPTIONS',\n 'TRACE',\n 'COPY',\n 'LOCK',\n 'MKCOL',\n 'MOVE',\n 'PROPFIND',\n 'PROPPATCH',\n 'SEARCH',\n 'UNLOCK',\n 'BIND',\n 'REBIND',\n 'UNBIND',\n 'ACL',\n 'REPORT',\n 'MKACTIVITY',\n 'CHECKOUT',\n 'MERGE',\n 'M-SEARCH',\n 'NOTIFY',\n 'SUBSCRIBE',\n 'UNSUBSCRIBE',\n 'PATCH',\n 'PURGE',\n 'MKCALENDAR',\n 'LINK',\n 'UNLINK',\n 'SOURCE',\n];\nvar method_connect = methods.indexOf('CONNECT');\nHTTPParser.prototype.reinitialize = HTTPParser;\nHTTPParser.prototype.close =\nHTTPParser.prototype.pause =\nHTTPParser.prototype.resume =\nHTTPParser.prototype.free = function () {};\nHTTPParser.prototype._compatMode0_11 = false;\nHTTPParser.prototype.getAsyncId = function() { return 0; };\n\nvar headerState = {\n REQUEST_LINE: true,\n RESPONSE_LINE: true,\n HEADER: true\n};\nHTTPParser.prototype.execute = function (chunk, start, length) {\n if (!(this instanceof HTTPParser)) {\n throw new TypeError('not a HTTPParser');\n }\n\n // backward compat to node < 0.11.4\n // Note: the start and length params were removed in newer version\n start = start || 0;\n length = typeof length === 'number' ? length : chunk.length;\n\n this.chunk = chunk;\n this.offset = start;\n var end = this.end = start + length;\n try {\n while (this.offset < end) {\n if (this[this.state]()) {\n break;\n }\n }\n } catch (err) {\n if (this.isUserCall) {\n throw err;\n }\n this.hadError = true;\n return err;\n }\n this.chunk = null;\n length = this.offset - start;\n if (headerState[this.state]) {\n this.headerSize += length;\n if (this.headerSize > (this.maxHeaderSize||HTTPParser.maxHeaderSize)) {\n return new Error('max header size exceeded');\n }\n }\n return length;\n};\n\nvar stateFinishAllowed = {\n REQUEST_LINE: true,\n RESPONSE_LINE: true,\n BODY_RAW: true\n};\nHTTPParser.prototype.finish = function () {\n if (this.hadError) {\n return;\n }\n if (!stateFinishAllowed[this.state]) {\n return new Error('invalid state for EOF');\n }\n if (this.state === 'BODY_RAW') {\n this.userCall()(this[kOnMessageComplete]());\n }\n};\n\n// These three methods are used for an internal speed optimization, and it also\n// works if theses are noops. Basically consume() asks us to read the bytes\n// ourselves, but if we don't do it we get them through execute().\nHTTPParser.prototype.consume =\nHTTPParser.prototype.unconsume =\nHTTPParser.prototype.getCurrentBuffer = function () {};\n\n//For correct error handling - see HTTPParser#execute\n//Usage: this.userCall()(userFunction('arg'));\nHTTPParser.prototype.userCall = function () {\n this.isUserCall = true;\n var self = this;\n return function (ret) {\n self.isUserCall = false;\n return ret;\n };\n};\n\nHTTPParser.prototype.nextRequest = function () {\n this.userCall()(this[kOnMessageComplete]());\n this.reinitialize(this.type);\n};\n\nHTTPParser.prototype.consumeLine = function () {\n var end = this.end,\n chunk = this.chunk;\n for (var i = this.offset; i < end; i++) {\n if (chunk[i] === 0x0a) { // \\n\n var line = this.line + chunk.toString(HTTPParser.encoding, this.offset, i);\n if (line.charAt(line.length - 1) === '\\r') {\n line = line.substr(0, line.length - 1);\n }\n this.line = '';\n this.offset = i + 1;\n return line;\n }\n }\n //line split over multiple chunks\n this.line += chunk.toString(HTTPParser.encoding, this.offset, this.end);\n this.offset = this.end;\n};\n\nvar headerExp = /^([^: \\t]+):[ \\t]*((?:.*[^ \\t])|)/;\nvar headerContinueExp = /^[ \\t]+(.*[^ \\t])/;\nHTTPParser.prototype.parseHeader = function (line, headers) {\n if (line.indexOf('\\r') !== -1) {\n throw parseErrorCode('HPE_LF_EXPECTED');\n }\n\n var match = headerExp.exec(line);\n var k = match && match[1];\n if (k) { // skip empty string (malformed header)\n headers.push(k);\n headers.push(match[2]);\n } else {\n var matchContinue = headerContinueExp.exec(line);\n if (matchContinue && headers.length) {\n if (headers[headers.length - 1]) {\n headers[headers.length - 1] += ' ';\n }\n headers[headers.length - 1] += matchContinue[1];\n }\n }\n};\n\nvar requestExp = /^([A-Z-]+) ([^ ]+) HTTP\\/(\\d)\\.(\\d)$/;\nHTTPParser.prototype.REQUEST_LINE = function () {\n var line = this.consumeLine();\n if (!line) {\n return;\n }\n var match = requestExp.exec(line);\n if (match === null) {\n throw parseErrorCode('HPE_INVALID_CONSTANT');\n }\n this.info.method = this._compatMode0_11 ? match[1] : methods.indexOf(match[1]);\n if (this.info.method === -1) {\n throw new Error('invalid request method');\n }\n this.info.url = match[2];\n this.info.versionMajor = +match[3];\n this.info.versionMinor = +match[4];\n this.body_bytes = 0;\n this.state = 'HEADER';\n};\n\nvar responseExp = /^HTTP\\/(\\d)\\.(\\d) (\\d{3}) ?(.*)$/;\nHTTPParser.prototype.RESPONSE_LINE = function () {\n var line = this.consumeLine();\n if (!line) {\n return;\n }\n var match = responseExp.exec(line);\n if (match === null) {\n throw parseErrorCode('HPE_INVALID_CONSTANT');\n }\n this.info.versionMajor = +match[1];\n this.info.versionMinor = +match[2];\n var statusCode = this.info.statusCode = +match[3];\n this.info.statusMessage = match[4];\n // Implied zero length.\n if ((statusCode / 100 | 0) === 1 || statusCode === 204 || statusCode === 304) {\n this.body_bytes = 0;\n }\n this.state = 'HEADER';\n};\n\nHTTPParser.prototype.shouldKeepAlive = function () {\n if (this.info.versionMajor > 0 && this.info.versionMinor > 0) {\n if (this.connection.indexOf('close') !== -1) {\n return false;\n }\n } else if (this.connection.indexOf('keep-alive') === -1) {\n return false;\n }\n if (this.body_bytes !== null || this.isChunked) { // || skipBody\n return true;\n }\n return false;\n};\n\nHTTPParser.prototype.HEADER = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n var info = this.info;\n if (line) {\n this.parseHeader(line, info.headers);\n } else {\n var headers = info.headers;\n var hasContentLength = false;\n var currentContentLengthValue;\n var hasUpgradeHeader = false;\n for (var i = 0; i < headers.length; i += 2) {\n switch (headers[i].toLowerCase()) {\n case 'transfer-encoding':\n this.isChunked = headers[i + 1].toLowerCase() === 'chunked';\n break;\n case 'content-length':\n currentContentLengthValue = +headers[i + 1];\n if (hasContentLength) {\n // Fix duplicate Content-Length header with same values.\n // Throw error only if values are different.\n // Known issues:\n // https://github.com/request/request/issues/2091#issuecomment-328715113\n // https://github.com/nodejs/node/issues/6517#issuecomment-216263771\n if (currentContentLengthValue !== this.body_bytes) {\n throw parseErrorCode('HPE_UNEXPECTED_CONTENT_LENGTH');\n }\n } else {\n hasContentLength = true;\n this.body_bytes = currentContentLengthValue;\n }\n break;\n case 'connection':\n this.connection += headers[i + 1].toLowerCase();\n break;\n case 'upgrade':\n hasUpgradeHeader = true;\n break;\n }\n }\n\n // if both isChunked and hasContentLength, isChunked wins\n // This is required so the body is parsed using the chunked method, and matches\n // Chrome's behavior. We could, maybe, ignore them both (would get chunked\n // encoding into the body), and/or disable shouldKeepAlive to be more\n // resilient.\n if (this.isChunked && hasContentLength) {\n hasContentLength = false;\n this.body_bytes = null;\n }\n\n // Logic from https://github.com/nodejs/http-parser/blob/921d5585515a153fa00e411cf144280c59b41f90/http_parser.c#L1727-L1737\n // \"For responses, \"Upgrade: foo\" and \"Connection: upgrade\" are\n // mandatory only when it is a 101 Switching Protocols response,\n // otherwise it is purely informational, to announce support.\n if (hasUpgradeHeader && this.connection.indexOf('upgrade') != -1) {\n info.upgrade = this.type === HTTPParser.REQUEST || info.statusCode === 101;\n } else {\n info.upgrade = info.method === method_connect;\n }\n\n if (this.isChunked && info.upgrade) {\n this.isChunked = false;\n }\n\n info.shouldKeepAlive = this.shouldKeepAlive();\n //problem which also exists in original node: we should know skipBody before calling onHeadersComplete\n var skipBody;\n if (compatMode0_12) {\n skipBody = this.userCall()(this[kOnHeadersComplete](info));\n } else {\n skipBody = this.userCall()(this[kOnHeadersComplete](info.versionMajor,\n info.versionMinor, info.headers, info.method, info.url, info.statusCode,\n info.statusMessage, info.upgrade, info.shouldKeepAlive));\n }\n if (skipBody === 2) {\n this.nextRequest();\n return true;\n } else if (this.isChunked && !skipBody) {\n this.state = 'BODY_CHUNKHEAD';\n } else if (skipBody || this.body_bytes === 0) {\n this.nextRequest();\n // For older versions of node (v6.x and older?), that return skipBody=1 or skipBody=true,\n // need this \"return true;\" if it's an upgrade request.\n return info.upgrade;\n } else if (this.body_bytes === null) {\n this.state = 'BODY_RAW';\n } else {\n this.state = 'BODY_SIZED';\n }\n }\n};\n\nHTTPParser.prototype.BODY_CHUNKHEAD = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n this.body_bytes = parseInt(line, 16);\n if (!this.body_bytes) {\n this.state = 'BODY_CHUNKTRAILERS';\n } else {\n this.state = 'BODY_CHUNK';\n }\n};\n\nHTTPParser.prototype.BODY_CHUNK = function () {\n var length = Math.min(this.end - this.offset, this.body_bytes);\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset += length;\n this.body_bytes -= length;\n if (!this.body_bytes) {\n this.state = 'BODY_CHUNKEMPTYLINE';\n }\n};\n\nHTTPParser.prototype.BODY_CHUNKEMPTYLINE = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n assert.equal(line, '');\n this.state = 'BODY_CHUNKHEAD';\n};\n\nHTTPParser.prototype.BODY_CHUNKTRAILERS = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n if (line) {\n this.parseHeader(line, this.trailers);\n } else {\n if (this.trailers.length) {\n this.userCall()(this[kOnHeaders](this.trailers, ''));\n }\n this.nextRequest();\n }\n};\n\nHTTPParser.prototype.BODY_RAW = function () {\n var length = this.end - this.offset;\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset = this.end;\n};\n\nHTTPParser.prototype.BODY_SIZED = function () {\n var length = Math.min(this.end - this.offset, this.body_bytes);\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset += length;\n this.body_bytes -= length;\n if (!this.body_bytes) {\n this.nextRequest();\n }\n};\n\n// backward compat to node < 0.11.6\n['Headers', 'HeadersComplete', 'Body', 'MessageComplete'].forEach(function (name) {\n var k = HTTPParser['kOn' + name];\n Object.defineProperty(HTTPParser.prototype, 'on' + name, {\n get: function () {\n return this[k];\n },\n set: function (to) {\n // hack for backward compatibility\n this._compatMode0_11 = true;\n method_connect = 'CONNECT';\n return (this[k] = to);\n }\n });\n});\n\nfunction parseErrorCode(code) {\n var err = new Error('Parse Error');\n err.code = code;\n return err;\n}\n","module.exports = require(\"assert\");","'use strict';\n\nvar Parser = require('./parser'),\n Pipeline = require('./pipeline');\n\nvar Extensions = function() {\n this._rsv1 = this._rsv2 = this._rsv3 = null;\n\n this._byName = {};\n this._inOrder = [];\n this._sessions = [];\n this._index = {};\n};\n\nExtensions.MESSAGE_OPCODES = [1, 2];\n\nvar instance = {\n add: function(ext) {\n if (typeof ext.name !== 'string') throw new TypeError('extension.name must be a string');\n if (ext.type !== 'permessage') throw new TypeError('extension.type must be \"permessage\"');\n\n if (typeof ext.rsv1 !== 'boolean') throw new TypeError('extension.rsv1 must be true or false');\n if (typeof ext.rsv2 !== 'boolean') throw new TypeError('extension.rsv2 must be true or false');\n if (typeof ext.rsv3 !== 'boolean') throw new TypeError('extension.rsv3 must be true or false');\n\n if (this._byName.hasOwnProperty(ext.name))\n throw new TypeError('An extension with name \"' + ext.name + '\" is already registered');\n\n this._byName[ext.name] = ext;\n this._inOrder.push(ext);\n },\n\n generateOffer: function() {\n var sessions = [],\n offer = [],\n index = {};\n\n this._inOrder.forEach(function(ext) {\n var session = ext.createClientSession();\n if (!session) return;\n\n var record = [ext, session];\n sessions.push(record);\n index[ext.name] = record;\n\n var offers = session.generateOffer();\n offers = offers ? [].concat(offers) : [];\n\n offers.forEach(function(off) {\n offer.push(Parser.serializeParams(ext.name, off));\n }, this);\n }, this);\n\n this._sessions = sessions;\n this._index = index;\n\n return offer.length > 0 ? offer.join(', ') : null;\n },\n\n activate: function(header) {\n var responses = Parser.parseHeader(header),\n sessions = [];\n\n responses.eachOffer(function(name, params) {\n var record = this._index[name];\n\n if (!record)\n throw new Error('Server sent an extension response for unknown extension \"' + name + '\"');\n\n var ext = record[0],\n session = record[1],\n reserved = this._reserved(ext);\n\n if (reserved)\n throw new Error('Server sent two extension responses that use the RSV' +\n reserved[0] + ' bit: \"' +\n reserved[1] + '\" and \"' + ext.name + '\"');\n\n if (session.activate(params) !== true)\n throw new Error('Server sent unacceptable extension parameters: ' +\n Parser.serializeParams(name, params));\n\n this._reserve(ext);\n sessions.push(record);\n }, this);\n\n this._sessions = sessions;\n this._pipeline = new Pipeline(sessions);\n },\n\n generateResponse: function(header) {\n var sessions = [],\n response = [],\n offers = Parser.parseHeader(header);\n\n this._inOrder.forEach(function(ext) {\n var offer = offers.byName(ext.name);\n if (offer.length === 0 || this._reserved(ext)) return;\n\n var session = ext.createServerSession(offer);\n if (!session) return;\n\n this._reserve(ext);\n sessions.push([ext, session]);\n response.push(Parser.serializeParams(ext.name, session.generateResponse()));\n }, this);\n\n this._sessions = sessions;\n this._pipeline = new Pipeline(sessions);\n\n return response.length > 0 ? response.join(', ') : null;\n },\n\n validFrameRsv: function(frame) {\n var allowed = { rsv1: false, rsv2: false, rsv3: false },\n ext;\n\n if (Extensions.MESSAGE_OPCODES.indexOf(frame.opcode) >= 0) {\n for (var i = 0, n = this._sessions.length; i < n; i++) {\n ext = this._sessions[i][0];\n allowed.rsv1 = allowed.rsv1 || ext.rsv1;\n allowed.rsv2 = allowed.rsv2 || ext.rsv2;\n allowed.rsv3 = allowed.rsv3 || ext.rsv3;\n }\n }\n\n return (allowed.rsv1 || !frame.rsv1) &&\n (allowed.rsv2 || !frame.rsv2) &&\n (allowed.rsv3 || !frame.rsv3);\n },\n\n processIncomingMessage: function(message, callback, context) {\n this._pipeline.processIncomingMessage(message, callback, context);\n },\n\n processOutgoingMessage: function(message, callback, context) {\n this._pipeline.processOutgoingMessage(message, callback, context);\n },\n\n close: function(callback, context) {\n if (!this._pipeline) return callback.call(context);\n this._pipeline.close(callback, context);\n },\n\n _reserve: function(ext) {\n this._rsv1 = this._rsv1 || (ext.rsv1 && ext.name);\n this._rsv2 = this._rsv2 || (ext.rsv2 && ext.name);\n this._rsv3 = this._rsv3 || (ext.rsv3 && ext.name);\n },\n\n _reserved: function(ext) {\n if (this._rsv1 && ext.rsv1) return [1, this._rsv1];\n if (this._rsv2 && ext.rsv2) return [2, this._rsv2];\n if (this._rsv3 && ext.rsv3) return [3, this._rsv3];\n return false;\n }\n};\n\nfor (var key in instance)\n Extensions.prototype[key] = instance[key];\n\nmodule.exports = Extensions;\n","'use strict';\n\nvar TOKEN = /([!#\\$%&'\\*\\+\\-\\.\\^_`\\|~0-9A-Za-z]+)/,\n NOTOKEN = /([^!#\\$%&'\\*\\+\\-\\.\\^_`\\|~0-9A-Za-z])/g,\n QUOTED = /\"((?:\\\\[\\x00-\\x7f]|[^\\x00-\\x08\\x0a-\\x1f\\x7f\"\\\\])*)\"/,\n PARAM = new RegExp(TOKEN.source + '(?:=(?:' + TOKEN.source + '|' + QUOTED.source + '))?'),\n EXT = new RegExp(TOKEN.source + '(?: *; *' + PARAM.source + ')*', 'g'),\n EXT_LIST = new RegExp('^' + EXT.source + '(?: *, *' + EXT.source + ')*$'),\n NUMBER = /^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$/;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar Parser = {\n parseHeader: function(header) {\n var offers = new Offers();\n if (header === '' || header === undefined) return offers;\n\n if (!EXT_LIST.test(header))\n throw new SyntaxError('Invalid Sec-WebSocket-Extensions header: ' + header);\n\n var values = header.match(EXT);\n\n values.forEach(function(value) {\n var params = value.match(new RegExp(PARAM.source, 'g')),\n name = params.shift(),\n offer = {};\n\n params.forEach(function(param) {\n var args = param.match(PARAM), key = args[1], data;\n\n if (args[2] !== undefined) {\n data = args[2];\n } else if (args[3] !== undefined) {\n data = args[3].replace(/\\\\/g, '');\n } else {\n data = true;\n }\n if (NUMBER.test(data)) data = parseFloat(data);\n\n if (hasOwnProperty.call(offer, key)) {\n offer[key] = [].concat(offer[key]);\n offer[key].push(data);\n } else {\n offer[key] = data;\n }\n }, this);\n offers.push(name, offer);\n }, this);\n\n return offers;\n },\n\n serializeParams: function(name, params) {\n var values = [];\n\n var print = function(key, value) {\n if (value instanceof Array) {\n value.forEach(function(v) { print(key, v) });\n } else if (value === true) {\n values.push(key);\n } else if (typeof value === 'number') {\n values.push(key + '=' + value);\n } else if (NOTOKEN.test(value)) {\n values.push(key + '=\"' + value.replace(/\"/g, '\\\\\"') + '\"');\n } else {\n values.push(key + '=' + value);\n }\n };\n\n for (var key in params) print(key, params[key]);\n\n return [name].concat(values).join('; ');\n }\n};\n\nvar Offers = function() {\n this._byName = {};\n this._inOrder = [];\n};\n\nOffers.prototype.push = function(name, params) {\n if (!hasOwnProperty.call(this._byName, name))\n this._byName[name] = [];\n\n this._byName[name].push(params);\n this._inOrder.push({ name: name, params: params });\n};\n\nOffers.prototype.eachOffer = function(callback, context) {\n var list = this._inOrder;\n for (var i = 0, n = list.length; i < n; i++)\n callback.call(context, list[i].name, list[i].params);\n};\n\nOffers.prototype.byName = function(name) {\n return this._byName[name] || [];\n};\n\nOffers.prototype.toArray = function() {\n return this._inOrder.slice();\n};\n\nmodule.exports = Parser;\n","'use strict';\n\nvar Cell = require('./cell'),\n Pledge = require('./pledge');\n\nvar Pipeline = function(sessions) {\n this._cells = sessions.map(function(session) { return new Cell(session) });\n this._stopped = { incoming: false, outgoing: false };\n};\n\nPipeline.prototype.processIncomingMessage = function(message, callback, context) {\n if (this._stopped.incoming) return;\n this._loop('incoming', this._cells.length - 1, -1, -1, message, callback, context);\n};\n\nPipeline.prototype.processOutgoingMessage = function(message, callback, context) {\n if (this._stopped.outgoing) return;\n this._loop('outgoing', 0, this._cells.length, 1, message, callback, context);\n};\n\nPipeline.prototype.close = function(callback, context) {\n this._stopped = { incoming: true, outgoing: true };\n\n var closed = this._cells.map(function(a) { return a.close() });\n if (callback)\n Pledge.all(closed).then(function() { callback.call(context) });\n};\n\nPipeline.prototype._loop = function(direction, start, end, step, message, callback, context) {\n var cells = this._cells,\n n = cells.length,\n self = this;\n\n while (n--) cells[n].pending(direction);\n\n var pipe = function(index, error, msg) {\n if (index === end) return callback.call(context, error, msg);\n\n cells[index][direction](error, msg, function(err, m) {\n if (err) self._stopped[direction] = true;\n pipe(index + step, err, m);\n });\n };\n pipe(start, null, message);\n};\n\nmodule.exports = Pipeline;\n","'use strict';\n\nvar Functor = require('./functor'),\n Pledge = require('./pledge');\n\nvar Cell = function(tuple) {\n this._ext = tuple[0];\n this._session = tuple[1];\n\n this._functors = {\n incoming: new Functor(this._session, 'processIncomingMessage'),\n outgoing: new Functor(this._session, 'processOutgoingMessage')\n };\n};\n\nCell.prototype.pending = function(direction) {\n var functor = this._functors[direction];\n if (!functor._stopped) functor.pending += 1;\n};\n\nCell.prototype.incoming = function(error, message, callback, context) {\n this._exec('incoming', error, message, callback, context);\n};\n\nCell.prototype.outgoing = function(error, message, callback, context) {\n this._exec('outgoing', error, message, callback, context);\n};\n\nCell.prototype.close = function() {\n this._closed = this._closed || new Pledge();\n this._doClose();\n return this._closed;\n};\n\nCell.prototype._exec = function(direction, error, message, callback, context) {\n this._functors[direction].call(error, message, function(err, msg) {\n if (err) err.message = this._ext.name + ': ' + err.message;\n callback.call(context, err, msg);\n this._doClose();\n }, this);\n};\n\nCell.prototype._doClose = function() {\n var fin = this._functors.incoming,\n fout = this._functors.outgoing;\n\n if (!this._closed || fin.pending + fout.pending !== 0) return;\n if (this._session) this._session.close();\n this._session = null;\n this._closed.done();\n};\n\nmodule.exports = Cell;\n","'use strict';\n\nvar RingBuffer = require('./ring_buffer');\n\nvar Functor = function(session, method) {\n this._session = session;\n this._method = method;\n this._queue = new RingBuffer(Functor.QUEUE_SIZE);\n this._stopped = false;\n this.pending = 0;\n};\n\nFunctor.QUEUE_SIZE = 8;\n\nFunctor.prototype.call = function(error, message, callback, context) {\n if (this._stopped) return;\n\n var record = { error: error, message: message, callback: callback, context: context, done: false },\n called = false,\n self = this;\n\n this._queue.push(record);\n\n if (record.error) {\n record.done = true;\n this._stop();\n return this._flushQueue();\n }\n\n var handler = function(err, msg) {\n if (!(called ^ (called = true))) return;\n\n if (err) {\n self._stop();\n record.error = err;\n record.message = null;\n } else {\n record.message = msg;\n }\n\n record.done = true;\n self._flushQueue();\n };\n\n try {\n this._session[this._method](message, handler);\n } catch (err) {\n handler(err);\n }\n};\n\nFunctor.prototype._stop = function() {\n this.pending = this._queue.length;\n this._stopped = true;\n};\n\nFunctor.prototype._flushQueue = function() {\n var queue = this._queue, record;\n\n while (queue.length > 0 && queue.peek().done) {\n record = queue.shift();\n if (record.error) {\n this.pending = 0;\n queue.clear();\n } else {\n this.pending -= 1;\n }\n record.callback.call(record.context, record.error, record.message);\n }\n};\n\nmodule.exports = Functor;\n","'use strict';\n\nvar Frame = function() {};\n\nvar instance = {\n final: false,\n rsv1: false,\n rsv2: false,\n rsv3: false,\n opcode: null,\n masked: false,\n maskingKey: null,\n lengthBytes: 1,\n length: 0,\n payload: null\n};\n\nfor (var key in instance)\n Frame.prototype[key] = instance[key];\n\nmodule.exports = Frame;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Message = function() {\n this.rsv1 = false;\n this.rsv2 = false;\n this.rsv3 = false;\n this.opcode = null;\n this.length = 0;\n this._chunks = [];\n};\n\nvar instance = {\n read: function() {\n return this.data = this.data || Buffer.concat(this._chunks, this.length);\n },\n\n pushFrame: function(frame) {\n this.rsv1 = this.rsv1 || frame.rsv1;\n this.rsv2 = this.rsv2 || frame.rsv2;\n this.rsv3 = this.rsv3 || frame.rsv3;\n\n if (this.opcode === null) this.opcode = frame.opcode;\n\n this._chunks.push(frame.payload);\n this.length += frame.length;\n }\n};\n\nfor (var key in instance)\n Message.prototype[key] = instance[key];\n\nmodule.exports = Message;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Stream = require('stream').Stream,\n url = require('url'),\n util = require('util'),\n Base = require('./base'),\n Headers = require('./headers'),\n HttpParser = require('../http_parser');\n\nvar PORTS = { 'ws:': 80, 'wss:': 443 };\n\nvar Proxy = function(client, origin, options) {\n this._client = client;\n this._http = new HttpParser('response');\n this._origin = (typeof client.url === 'object') ? client.url : url.parse(client.url);\n this._url = (typeof origin === 'object') ? origin : url.parse(origin);\n this._options = options || {};\n this._state = 0;\n\n this.readable = this.writable = true;\n this._paused = false;\n\n this._headers = new Headers();\n this._headers.set('Host', this._origin.host);\n this._headers.set('Connection', 'keep-alive');\n this._headers.set('Proxy-Connection', 'keep-alive');\n\n var auth = this._url.auth && Buffer.from(this._url.auth, 'utf8').toString('base64');\n if (auth) this._headers.set('Proxy-Authorization', 'Basic ' + auth);\n};\nutil.inherits(Proxy, Stream);\n\nvar instance = {\n setHeader: function(name, value) {\n if (this._state !== 0) return false;\n this._headers.set(name, value);\n return true;\n },\n\n start: function() {\n if (this._state !== 0) return false;\n this._state = 1;\n\n var origin = this._origin,\n port = origin.port || PORTS[origin.protocol],\n start = 'CONNECT ' + origin.hostname + ':' + port + ' HTTP/1.1';\n\n var headers = [start, this._headers.toString(), ''];\n\n this.emit('data', Buffer.from(headers.join('\\r\\n'), 'utf8'));\n return true;\n },\n\n pause: function() {\n this._paused = true;\n },\n\n resume: function() {\n this._paused = false;\n this.emit('drain');\n },\n\n write: function(chunk) {\n if (!this.writable) return false;\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return !this._paused;\n\n this.statusCode = this._http.statusCode;\n this.headers = this._http.headers;\n\n if (this.statusCode === 200) {\n this.emit('connect', new Base.ConnectEvent());\n } else {\n var message = \"Can't establish a connection to the server at \" + this._origin.href;\n this.emit('error', new Error(message));\n }\n this.end();\n return !this._paused;\n },\n\n end: function(chunk) {\n if (!this.writable) return;\n if (chunk !== undefined) this.write(chunk);\n this.readable = this.writable = false;\n this.emit('close');\n this.emit('end');\n },\n\n destroy: function() {\n this.end();\n }\n};\n\nfor (var key in instance)\n Proxy.prototype[key] = instance[key];\n\nmodule.exports = Proxy;\n","'use strict';\n\nvar util = require('util'),\n HttpParser = require('../http_parser'),\n Base = require('./base'),\n Draft75 = require('./draft75'),\n Draft76 = require('./draft76'),\n Hybi = require('./hybi');\n\nvar Server = function(options) {\n Base.call(this, null, null, options);\n this._http = new HttpParser('request');\n};\nutil.inherits(Server, Base);\n\nvar instance = {\n EVENTS: ['open', 'message', 'error', 'close', 'ping', 'pong'],\n\n _bindEventListeners: function() {\n this.messages.on('error', function() {});\n this.on('error', function() {});\n },\n\n parse: function(chunk) {\n if (this._delegate) return this._delegate.parse(chunk);\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return;\n\n this.method = this._http.method;\n this.url = this._http.url;\n this.headers = this._http.headers;\n this.body = this._http.body;\n\n var self = this;\n this._delegate = Server.http(this, this._options);\n this._delegate.messages = this.messages;\n this._delegate.io = this.io;\n this._open();\n\n this.EVENTS.forEach(function(event) {\n this._delegate.on(event, function(e) { self.emit(event, e) });\n }, this);\n\n this.protocol = this._delegate.protocol;\n this.version = this._delegate.version;\n\n this.parse(this._http.body);\n this.emit('connect', new Base.ConnectEvent());\n },\n\n _open: function() {\n this.__queue.forEach(function(msg) {\n this._delegate[msg[0]].apply(this._delegate, msg[1]);\n }, this);\n this.__queue = [];\n }\n};\n\n['addExtension', 'setHeader', 'start', 'frame', 'text', 'binary', 'ping', 'close'].forEach(function(method) {\n instance[method] = function() {\n if (this._delegate) {\n return this._delegate[method].apply(this._delegate, arguments);\n } else {\n this.__queue.push([method, arguments]);\n return true;\n }\n };\n});\n\nfor (var key in instance)\n Server.prototype[key] = instance[key];\n\nServer.isSecureRequest = function(request) {\n if (request.connection && request.connection.authorized !== undefined) return true;\n if (request.socket && request.socket.secure) return true;\n\n var headers = request.headers;\n if (!headers) return false;\n if (headers['https'] === 'on') return true;\n if (headers['x-forwarded-ssl'] === 'on') return true;\n if (headers['x-forwarded-scheme'] === 'https') return true;\n if (headers['x-forwarded-proto'] === 'https') return true;\n\n return false;\n};\n\nServer.determineUrl = function(request) {\n var scheme = this.isSecureRequest(request) ? 'wss:' : 'ws:';\n return scheme + '//' + request.headers.host + request.url;\n};\n\nServer.http = function(request, options) {\n options = options || {};\n if (options.requireMasking === undefined) options.requireMasking = true;\n\n var headers = request.headers,\n version = headers['sec-websocket-version'],\n key = headers['sec-websocket-key'],\n key1 = headers['sec-websocket-key1'],\n key2 = headers['sec-websocket-key2'],\n url = this.determineUrl(request);\n\n if (version || key)\n return new Hybi(request, url, options);\n else if (key1 || key2)\n return new Draft76(request, url, options);\n else\n return new Draft75(request, url, options);\n};\n\nmodule.exports = Server;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Base = require('./base'),\n Draft75 = require('./draft75'),\n crypto = require('crypto'),\n util = require('util');\n\n\nvar numberFromKey = function(key) {\n return parseInt((key.match(/[0-9]/g) || []).join(''), 10);\n};\n\nvar spacesInKey = function(key) {\n return (key.match(/ /g) || []).length;\n};\n\n\nvar Draft76 = function(request, url, options) {\n Draft75.apply(this, arguments);\n this._stage = -1;\n this._body = [];\n this.version = 'hixie-76';\n\n this._headers.clear();\n\n this._headers.set('Upgrade', 'WebSocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Origin', this._request.headers.origin);\n this._headers.set('Sec-WebSocket-Location', this.url);\n};\nutil.inherits(Draft76, Draft75);\n\nvar instance = {\n BODY_SIZE: 8,\n\n start: function() {\n if (!Draft75.prototype.start.call(this)) return false;\n this._started = true;\n this._sendHandshakeBody();\n return true;\n },\n\n close: function() {\n if (this.readyState === 3) return false;\n if (this.readyState === 1) this._write(Buffer.from([0xFF, 0x00]));\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n _handshakeResponse: function() {\n var headers = this._request.headers,\n key1 = headers['sec-websocket-key1'],\n key2 = headers['sec-websocket-key2'];\n\n if (!key1) throw new Error('Missing required header: Sec-WebSocket-Key1');\n if (!key2) throw new Error('Missing required header: Sec-WebSocket-Key2');\n\n var number1 = numberFromKey(key1),\n spaces1 = spacesInKey(key1),\n\n number2 = numberFromKey(key2),\n spaces2 = spacesInKey(key2);\n\n if (number1 % spaces1 !== 0 || number2 % spaces2 !== 0)\n throw new Error('Client sent invalid Sec-WebSocket-Key headers');\n\n this._keyValues = [number1 / spaces1, number2 / spaces2];\n\n var start = 'HTTP/1.1 101 WebSocket Protocol Handshake',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'binary');\n },\n\n _handshakeSignature: function() {\n if (this._body.length < this.BODY_SIZE) return null;\n\n var md5 = crypto.createHash('md5'),\n buffer = Buffer.allocUnsafe(8 + this.BODY_SIZE);\n\n buffer.writeUInt32BE(this._keyValues[0], 0);\n buffer.writeUInt32BE(this._keyValues[1], 4);\n Buffer.from(this._body).copy(buffer, 8, 0, this.BODY_SIZE);\n\n md5.update(buffer);\n return Buffer.from(md5.digest('binary'), 'binary');\n },\n\n _sendHandshakeBody: function() {\n if (!this._started) return;\n var signature = this._handshakeSignature();\n if (!signature) return;\n\n this._write(signature);\n this._stage = 0;\n this._open();\n\n if (this._body.length > this.BODY_SIZE)\n this.parse(this._body.slice(this.BODY_SIZE));\n },\n\n _parseLeadingByte: function(octet) {\n if (octet !== 0xFF)\n return Draft75.prototype._parseLeadingByte.call(this, octet);\n\n this._closing = true;\n this._length = 0;\n this._stage = 1;\n }\n};\n\nfor (var key in instance)\n Draft76.prototype[key] = instance[key];\n\nmodule.exports = Draft76;\n","'use strict';\n\nvar util = require('util'),\n net = require('net'),\n tls = require('tls'),\n url = require('url'),\n driver = require('websocket-driver'),\n API = require('./api'),\n Event = require('./api/event');\n\nvar DEFAULT_PORTS = {'http:': 80, 'https:': 443, 'ws:':80, 'wss:': 443},\n SECURE_PROTOCOLS = ['https:', 'wss:'];\n\nvar Client = function(_url, protocols, options) {\n options = options || {};\n\n this.url = _url;\n this._driver = driver.client(this.url, {maxLength: options.maxLength, protocols: protocols});\n\n ['open', 'error'].forEach(function(event) {\n this._driver.on(event, function() {\n self.headers = self._driver.headers;\n self.statusCode = self._driver.statusCode;\n });\n }, this);\n\n var proxy = options.proxy || {},\n endpoint = url.parse(proxy.origin || this.url),\n port = endpoint.port || DEFAULT_PORTS[endpoint.protocol],\n secure = SECURE_PROTOCOLS.indexOf(endpoint.protocol) >= 0,\n onConnect = function() { self._onConnect() },\n netOptions = options.net || {},\n originTLS = options.tls || {},\n socketTLS = proxy.origin ? (proxy.tls || {}) : originTLS,\n self = this;\n\n netOptions.host = socketTLS.host = endpoint.hostname;\n netOptions.port = socketTLS.port = port;\n\n originTLS.ca = originTLS.ca || options.ca;\n socketTLS.servername = socketTLS.servername || endpoint.hostname;\n\n this._stream = secure\n ? tls.connect(socketTLS, onConnect)\n : net.connect(netOptions, onConnect);\n\n if (proxy.origin) this._configureProxy(proxy, originTLS);\n\n API.call(this, options);\n};\nutil.inherits(Client, API);\n\nClient.prototype._onConnect = function() {\n var worker = this._proxy || this._driver;\n worker.start();\n};\n\nClient.prototype._configureProxy = function(proxy, originTLS) {\n var uri = url.parse(this.url),\n secure = SECURE_PROTOCOLS.indexOf(uri.protocol) >= 0,\n self = this,\n name;\n\n this._proxy = this._driver.proxy(proxy.origin);\n\n if (proxy.headers) {\n for (name in proxy.headers) this._proxy.setHeader(name, proxy.headers[name]);\n }\n\n this._proxy.pipe(this._stream, {end: false});\n this._stream.pipe(this._proxy);\n\n this._proxy.on('connect', function() {\n if (secure) {\n var options = {socket: self._stream, servername: uri.hostname};\n for (name in originTLS) options[name] = originTLS[name];\n self._stream = tls.connect(options);\n self._configureStream();\n }\n self._driver.io.pipe(self._stream);\n self._stream.pipe(self._driver.io);\n self._driver.start();\n });\n\n this._proxy.on('error', function(error) {\n self._driver.emit('error', error);\n });\n};\n\nmodule.exports = Client;\n","module.exports = require(\"net\");","module.exports = require(\"tls\");","'use strict';\n\nvar Stream = require('stream').Stream,\n util = require('util'),\n driver = require('websocket-driver'),\n Headers = require('websocket-driver/lib/websocket/driver/headers'),\n API = require('./websocket/api'),\n EventTarget = require('./websocket/api/event_target'),\n Event = require('./websocket/api/event');\n\nvar EventSource = function(request, response, options) {\n this.writable = true;\n options = options || {};\n\n this._stream = response.socket;\n this._ping = options.ping || this.DEFAULT_PING;\n this._retry = options.retry || this.DEFAULT_RETRY;\n\n var scheme = driver.isSecureRequest(request) ? 'https:' : 'http:';\n this.url = scheme + '//' + request.headers.host + request.url;\n this.lastEventId = request.headers['last-event-id'] || '';\n this.readyState = API.CONNECTING;\n\n var headers = new Headers(),\n self = this;\n\n if (options.headers) {\n for (var key in options.headers) headers.set(key, options.headers[key]);\n }\n\n if (!this._stream || !this._stream.writable) return;\n process.nextTick(function() { self._open() });\n\n this._stream.setTimeout(0);\n this._stream.setNoDelay(true);\n\n var handshake = 'HTTP/1.1 200 OK\\r\\n' +\n 'Content-Type: text/event-stream\\r\\n' +\n 'Cache-Control: no-cache, no-store\\r\\n' +\n 'Connection: close\\r\\n' +\n headers.toString() +\n '\\r\\n' +\n 'retry: ' + Math.floor(this._retry * 1000) + '\\r\\n\\r\\n';\n\n this._write(handshake);\n\n this._stream.on('drain', function() { self.emit('drain') });\n\n if (this._ping)\n this._pingTimer = setInterval(function() { self.ping() }, this._ping * 1000);\n\n ['error', 'end'].forEach(function(event) {\n self._stream.on(event, function() { self.close() });\n });\n};\nutil.inherits(EventSource, Stream);\n\nEventSource.isEventSource = function(request) {\n if (request.method !== 'GET') return false;\n var accept = (request.headers.accept || '').split(/\\s*,\\s*/);\n return accept.indexOf('text/event-stream') >= 0;\n};\n\nvar instance = {\n DEFAULT_PING: 10,\n DEFAULT_RETRY: 5,\n\n _write: function(chunk) {\n if (!this.writable) return false;\n try {\n return this._stream.write(chunk, 'utf8');\n } catch (e) {\n return false;\n }\n },\n\n _open: function() {\n if (this.readyState !== API.CONNECTING) return;\n\n this.readyState = API.OPEN;\n\n var event = new Event('open');\n event.initEvent('open', false, false);\n this.dispatchEvent(event);\n },\n\n write: function(message) {\n return this.send(message);\n },\n\n end: function(message) {\n if (message !== undefined) this.write(message);\n this.close();\n },\n\n send: function(message, options) {\n if (this.readyState > API.OPEN) return false;\n\n message = String(message).replace(/(\\r\\n|\\r|\\n)/g, '$1data: ');\n options = options || {};\n\n var frame = '';\n if (options.event) frame += 'event: ' + options.event + '\\r\\n';\n if (options.id) frame += 'id: ' + options.id + '\\r\\n';\n frame += 'data: ' + message + '\\r\\n\\r\\n';\n\n return this._write(frame);\n },\n\n ping: function() {\n return this._write(':\\r\\n\\r\\n');\n },\n\n close: function() {\n if (this.readyState > API.OPEN) return false;\n\n this.readyState = API.CLOSED;\n this.writable = false;\n if (this._pingTimer) clearInterval(this._pingTimer);\n if (this._stream) this._stream.end();\n\n var event = new Event('close');\n event.initEvent('close', false, false);\n this.dispatchEvent(event);\n\n return true;\n }\n};\n\nfor (var method in instance) EventSource.prototype[method] = instance[method];\nfor (var key in EventTarget) EventSource.prototype[key] = EventTarget[key];\n\nmodule.exports = EventSource;\n","module.exports = require(\"child_process\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n\n url += '/' + 2 + '?' + query;\n\n var xhr = Runtime.createXHR();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n let { status, responseText } = xhr;\n if (status !== 200) {\n Logger.debug(\n `TimelineSender Error: received ${status} from stats.pusher.com`\n );\n return;\n }\n\n try {\n var { host } = JSON.parse(responseText);\n } catch (e) {\n Logger.debug(`TimelineSenderError: invalid response ${responseText}`);\n }\n if (host) {\n sender.host = host;\n }\n }\n };\n\n xhr.send();\n };\n};\n\nvar xhr = {\n name: 'xhr',\n getAgent\n};\n\nexport default xhr;\n","import Isomorphic from 'isomorphic/runtime';\nimport { Client as WebSocket } from 'faye-websocket';\nimport { XMLHttpRequest } from 'xmlhttprequest';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport xhrTimeline from 'isomorphic/timeline/xhr_timeline';\nimport { randomInt } from 'crypto';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst NodeJS: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n createSocketRequest,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: xhrTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n return randomInt(max);\n }\n};\n\nexport default NodeJS;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/bootstrap","webpack://Pusher/external \"util\"","webpack://Pusher/./node_modules/safe-buffer/index.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/base.js","webpack://Pusher/external \"crypto\"","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver.js","webpack://Pusher/external \"stream\"","webpack://Pusher/external \"url\"","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api/event.js","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/headers.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/http_parser.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/ring_buffer.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/pledge.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/draft75.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/api/event_target.js","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket.js","webpack://Pusher/./node_modules/xmlhttprequest/lib/XMLHttpRequest.js","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/external \"buffer\"","webpack://Pusher/external \"events\"","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/streams.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/stream_reader.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/client.js","webpack://Pusher/./node_modules/http-parser-js/http-parser.js","webpack://Pusher/external \"assert\"","webpack://Pusher/./node_modules/websocket-extensions/lib/websocket_extensions.js","webpack://Pusher/./node_modules/websocket-extensions/lib/parser.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/index.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/cell.js","webpack://Pusher/./node_modules/websocket-extensions/lib/pipeline/functor.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/hybi/message.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/proxy.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/server.js","webpack://Pusher/./node_modules/websocket-driver/lib/websocket/driver/draft76.js","webpack://Pusher/./node_modules/faye-websocket/lib/faye/websocket/client.js","webpack://Pusher/external \"net\"","webpack://Pusher/external \"tls\"","webpack://Pusher/./node_modules/faye-websocket/lib/faye/eventsource.js","webpack://Pusher/external \"child_process\"","webpack://Pusher/external \"fs\"","webpack://Pusher/external \"http\"","webpack://Pusher/external \"https\"","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/node/net_info.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/runtimes/isomorphic/timeline/xhr_timeline.ts","webpack://Pusher/./src/runtimes/node/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":";;;;;;;;;;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;AClFA,iC;;;;;;ACAA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Da;;AAEb,cAAc,mBAAO,CAAC,CAAa;AACnC,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,CAAM;AAC5B,cAAc,mBAAO,CAAC,EAAY;AAClC,cAAc,mBAAO,CAAC,CAAW;AACjC,cAAc,mBAAO,CAAC,EAAiB;;AAEvC;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yCAAyC,+BAA+B;AACxE;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AChMA,mC;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,CAAe;AACpC,aAAa,mBAAO,CAAC,EAAiB;AACtC,aAAa,mBAAO,CAAC,EAAiB;;AAEtC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;;;;;;AC1CA,mC;;;;;;ACAA,gC;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;ACrBA,sCAAsC;AACtC,6CAA6C;;;;;;;;;;;;;;;AAE7C;;GAEG;AAEH,iDAAiD;AACjD,kDAAkD;AAClD,kCAAkC;AACl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AEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;AClCa;;AAEb,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,qBAAqB,mBAAO,CAAC,CAAa;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,yBAAyB;AAC/E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACtIa;;AAEb,kBAAkB,mBAAO,CAAC,CAAQ;AAClC,kBAAkB,mBAAO,CAAC,CAAM;AAChC,kBAAkB,mBAAO,CAAC,CAAkB;AAC5C,kBAAkB,mBAAO,CAAC,EAAoB;AAC9C,kBAAkB,mBAAO,CAAC,CAAa;;AAEvC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,0CAA0C,eAAe;AACzD,0CAA0C,+BAA+B;AACzE,0CAA0C,qCAAqC;;AAE/E;AACA;AACA,GAAG;AACH,gCAAgC;;AAEhC;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC,wBAAwB;AACjE,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA,sCAAsC,WAAW;AACjD;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,oCAAoC,iBAAiB;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oCAAoC,2BAA2B;AAC/D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACpMa;;AAEb,iBAAiB,mBAAO,CAAC,CAAa;AACtC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,CAAM;AAC/B,iBAAiB,mBAAO,CAAC,EAAsB;AAC/C,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAgB;;AAEzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,+CAA+C,mCAAmC;AAClF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,8GAA8G,EAAE,uDAAuD,EAAE,wBAAwB,EAAE,4BAA4B,EAAE;;AAEjO;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,oCAAoC;AAC7E;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AClea;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;ACjEa;;AAEb,iBAAiB,mBAAO,CAAC,EAAe;;AAExC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AA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;AAC3B,cAAc,mBAAO,CAAC,EAAO;;AAE7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,8CAA8C;AAC9C;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA,iGAAiG;AACjG,gEAAgE;AAChE,yDAAyD;AACzD,iCAAiC;AACjC,4DAA4D;AAC5D,wCAAwC;AACxC,gDAAgD;AAChD,mCAAmC;AACnC,YAAY,EAAE;AACd,0CAA0C;AAC1C,mEAAmE,kBAAkB,gFAAgF,WAAW;AAChL,6CAA6C;AAC7C,YAAY,EAAE;AACd,iDAAiD;AACjD,mEAAmE,WAAW,WAAW;AACzF,6CAA6C;AAC7C,YAAY,EAAE;AACd,YAAY,+BAA+B;AAC3C,mEAAmE,WAAW,WAAW;AACzF,6CAA6C;AAC7C,YAAY,EAAE;AACd,8FAA8F;AAC9F,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3mBA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,KAAK;AACL,GAAG,UAAU,IAA8B;AAC3C;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,OAAO;AACP;AACA;AACA,CAAC;;AAED,CAAC,EAAE,KAA6B,kEAAkE;;;;;;;ACt1ElG,iBAAiB,mBAAO,CAAC,EAA0B;;;;;;;ACAnD,mC;;;;;;ACAA,mC;;;;;;;ACAa;;AAEb;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAM;;;AAG3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;;;;;;;ACjJa;;AAEb,aAAa,mBAAO,CAAC,CAAa;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACpEa;;AAEb,iBAAiB,mBAAO,CAAC,CAAa;AACtC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,CAAK;AAC9B,iBAAiB,mBAAO,CAAC,CAAM;AAC/B,iBAAiB,mBAAO,CAAC,EAAgB;AACzC,iBAAiB,mBAAO,CAAC,CAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAQ;AACjC,iBAAiB,mBAAO,CAAC,EAAS;;AAElC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AC7IA;;AAEA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,UAAU;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;;;;;;;AC9cA,mC;;;;;;;ACAa;;AAEb,eAAe,mBAAO,CAAC,EAAU;AACjC,eAAe,mBAAO,CAAC,EAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,mBAAmB,wCAAwC;AAC3D;;AAEA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACjKa;;AAEb;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,mCAAmC,gBAAgB;AACnD,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,6BAA6B;AACnD;;AAEA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACtGa;;AAEb,aAAa,mBAAO,CAAC,EAAQ;AAC7B,aAAa,mBAAO,CAAC,EAAU;;AAE/B;AACA,kDAAkD,2BAA2B;AAC7E,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;;AAEnB,4CAA4C,mBAAmB;AAC/D;AACA,wCAAwC,yBAAyB;AACjE;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;AC9Ca;;AAEb,cAAc,mBAAO,CAAC,EAAW;AACjC,cAAc,mBAAO,CAAC,EAAU;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACpDa;;AAEb,iBAAiB,mBAAO,CAAC,EAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,gBAAgB,oFAAoF;AACpG;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACvEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"pusher.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 21);\n","module.exports = require(\"util\");","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Emitter = require('events').EventEmitter,\n util = require('util'),\n streams = require('../streams'),\n Headers = require('./headers'),\n Reader = require('./stream_reader');\n\nvar Base = function(request, url, options) {\n Emitter.call(this);\n Base.validateOptions(options || {}, ['maxLength', 'masking', 'requireMasking', 'protocols']);\n\n this._request = request;\n this._reader = new Reader();\n this._options = options || {};\n this._maxLength = this._options.maxLength || this.MAX_LENGTH;\n this._headers = new Headers();\n this.__queue = [];\n this.readyState = 0;\n this.url = url;\n\n this.io = new streams.IO(this);\n this.messages = new streams.Messages(this);\n this._bindEventListeners();\n};\nutil.inherits(Base, Emitter);\n\nBase.isWebSocket = function(request) {\n var connection = request.headers.connection || '',\n upgrade = request.headers.upgrade || '';\n\n return request.method === 'GET' &&\n connection.toLowerCase().split(/ *, */).indexOf('upgrade') >= 0 &&\n upgrade.toLowerCase() === 'websocket';\n};\n\nBase.validateOptions = function(options, validKeys) {\n for (var key in options) {\n if (validKeys.indexOf(key) < 0)\n throw new Error('Unrecognized option: ' + key);\n }\n};\n\nvar instance = {\n // This is 64MB, small enough for an average VPS to handle without\n // crashing from process out of memory\n MAX_LENGTH: 0x3ffffff,\n\n STATES: ['connecting', 'open', 'closing', 'closed'],\n\n _bindEventListeners: function() {\n var self = this;\n\n // Protocol errors are informational and do not have to be handled\n this.messages.on('error', function() {});\n\n this.on('message', function(event) {\n var messages = self.messages;\n if (messages.readable) messages.emit('data', event.data);\n });\n\n this.on('error', function(error) {\n var messages = self.messages;\n if (messages.readable) messages.emit('error', error);\n });\n\n this.on('close', function() {\n var messages = self.messages;\n if (!messages.readable) return;\n messages.readable = messages.writable = false;\n messages.emit('end');\n });\n },\n\n getState: function() {\n return this.STATES[this.readyState] || null;\n },\n\n addExtension: function(extension) {\n return false;\n },\n\n setHeader: function(name, value) {\n if (this.readyState > 0) return false;\n this._headers.set(name, value);\n return true;\n },\n\n start: function() {\n if (this.readyState !== 0) return false;\n\n if (!Base.isWebSocket(this._request))\n return this._failHandshake(new Error('Not a WebSocket request'));\n\n var response;\n\n try {\n response = this._handshakeResponse();\n } catch (error) {\n return this._failHandshake(error);\n }\n\n this._write(response);\n if (this._stage !== -1) this._open();\n return true;\n },\n\n _failHandshake: function(error) {\n var headers = new Headers();\n headers.set('Content-Type', 'text/plain');\n headers.set('Content-Length', Buffer.byteLength(error.message, 'utf8'));\n\n headers = ['HTTP/1.1 400 Bad Request', headers.toString(), error.message];\n this._write(Buffer.from(headers.join('\\r\\n'), 'utf8'));\n this._fail('protocol_error', error.message);\n\n return false;\n },\n\n text: function(message) {\n return this.frame(message);\n },\n\n binary: function(message) {\n return false;\n },\n\n ping: function() {\n return false;\n },\n\n pong: function() {\n return false;\n },\n\n close: function(reason, code) {\n if (this.readyState !== 1) return false;\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n _open: function() {\n this.readyState = 1;\n this.__queue.forEach(function(args) { this.frame.apply(this, args) }, this);\n this.__queue = [];\n this.emit('open', new Base.OpenEvent());\n },\n\n _queue: function(message) {\n this.__queue.push(message);\n return true;\n },\n\n _write: function(chunk) {\n var io = this.io;\n if (io.readable) io.emit('data', chunk);\n },\n\n _fail: function(type, message) {\n this.readyState = 2;\n this.emit('error', new Error(message));\n this.close();\n }\n};\n\nfor (var key in instance)\n Base.prototype[key] = instance[key];\n\n\nBase.ConnectEvent = function() {};\n\nBase.OpenEvent = function() {};\n\nBase.CloseEvent = function(code, reason) {\n this.code = code;\n this.reason = reason;\n};\n\nBase.MessageEvent = function(data) {\n this.data = data;\n};\n\nBase.PingEvent = function(data) {\n this.data = data;\n};\n\nBase.PongEvent = function(data) {\n this.data = data;\n};\n\nmodule.exports = Base;\n","module.exports = require(\"crypto\");","'use strict';\n\n// Protocol references:\n//\n// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75\n// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76\n// * http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17\n\nvar Base = require('./driver/base'),\n Client = require('./driver/client'),\n Server = require('./driver/server');\n\nvar Driver = {\n client: function(url, options) {\n options = options || {};\n if (options.masking === undefined) options.masking = true;\n return new Client(url, options);\n },\n\n server: function(options) {\n options = options || {};\n if (options.requireMasking === undefined) options.requireMasking = true;\n return new Server(options);\n },\n\n http: function() {\n return Server.http.apply(Server, arguments);\n },\n\n isSecureRequest: function(request) {\n return Server.isSecureRequest(request);\n },\n\n isWebSocket: function(request) {\n return Base.isWebSocket(request);\n },\n\n validateOptions: function(options, validKeys) {\n Base.validateOptions(options, validKeys);\n }\n};\n\nmodule.exports = Driver;\n","module.exports = require(\"stream\");","module.exports = require(\"url\");","'use strict';\n\nvar Event = function(eventType, options) {\n this.type = eventType;\n for (var key in options)\n this[key] = options[key];\n};\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n this.type = eventType;\n this.bubbles = canBubble;\n this.cancelable = cancelable;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","'use strict';\n\nvar Headers = function() {\n this.clear();\n};\n\nHeaders.prototype.ALLOWED_DUPLICATES = ['set-cookie', 'set-cookie2', 'warning', 'www-authenticate'];\n\nHeaders.prototype.clear = function() {\n this._sent = {};\n this._lines = [];\n};\n\nHeaders.prototype.set = function(name, value) {\n if (value === undefined) return;\n\n name = this._strip(name);\n value = this._strip(value);\n\n var key = name.toLowerCase();\n if (!this._sent.hasOwnProperty(key) || this.ALLOWED_DUPLICATES.indexOf(key) >= 0) {\n this._sent[key] = true;\n this._lines.push(name + ': ' + value + '\\r\\n');\n }\n};\n\nHeaders.prototype.toString = function() {\n return this._lines.join('');\n};\n\nHeaders.prototype._strip = function(string) {\n return string.toString().replace(/^ */, '').replace(/ *$/, '');\n};\n\nmodule.exports = Headers;\n","'use strict';\n\nvar NodeHTTPParser = require('http-parser-js').HTTPParser,\n Buffer = require('safe-buffer').Buffer;\n\nvar TYPES = {\n request: NodeHTTPParser.REQUEST || 'request',\n response: NodeHTTPParser.RESPONSE || 'response'\n};\n\nvar HttpParser = function(type) {\n this._type = type;\n this._parser = new NodeHTTPParser(TYPES[type]);\n this._complete = false;\n this.headers = {};\n\n var current = null,\n self = this;\n\n this._parser.onHeaderField = function(b, start, length) {\n current = b.toString('utf8', start, start + length).toLowerCase();\n };\n\n this._parser.onHeaderValue = function(b, start, length) {\n var value = b.toString('utf8', start, start + length);\n\n if (self.headers.hasOwnProperty(current))\n self.headers[current] += ', ' + value;\n else\n self.headers[current] = value;\n };\n\n this._parser.onHeadersComplete = this._parser[NodeHTTPParser.kOnHeadersComplete] =\n function(majorVersion, minorVersion, headers, method, pathname, statusCode) {\n var info = arguments[0];\n\n if (typeof info === 'object') {\n method = info.method;\n pathname = info.url;\n statusCode = info.statusCode;\n headers = info.headers;\n }\n\n self.method = (typeof method === 'number') ? HttpParser.METHODS[method] : method;\n self.statusCode = statusCode;\n self.url = pathname;\n\n if (!headers) return;\n\n for (var i = 0, n = headers.length, key, value; i < n; i += 2) {\n key = headers[i].toLowerCase();\n value = headers[i+1];\n if (self.headers.hasOwnProperty(key))\n self.headers[key] += ', ' + value;\n else\n self.headers[key] = value;\n }\n\n self._complete = true;\n };\n};\n\nHttpParser.METHODS = {\n 0: 'DELETE',\n 1: 'GET',\n 2: 'HEAD',\n 3: 'POST',\n 4: 'PUT',\n 5: 'CONNECT',\n 6: 'OPTIONS',\n 7: 'TRACE',\n 8: 'COPY',\n 9: 'LOCK',\n 10: 'MKCOL',\n 11: 'MOVE',\n 12: 'PROPFIND',\n 13: 'PROPPATCH',\n 14: 'SEARCH',\n 15: 'UNLOCK',\n 16: 'BIND',\n 17: 'REBIND',\n 18: 'UNBIND',\n 19: 'ACL',\n 20: 'REPORT',\n 21: 'MKACTIVITY',\n 22: 'CHECKOUT',\n 23: 'MERGE',\n 24: 'M-SEARCH',\n 25: 'NOTIFY',\n 26: 'SUBSCRIBE',\n 27: 'UNSUBSCRIBE',\n 28: 'PATCH',\n 29: 'PURGE',\n 30: 'MKCALENDAR',\n 31: 'LINK',\n 32: 'UNLINK'\n};\n\nvar VERSION = process.version\n ? process.version.match(/[0-9]+/g).map(function(n) { return parseInt(n, 10) })\n : [];\n\nif (VERSION[0] === 0 && VERSION[1] === 12) {\n HttpParser.METHODS[16] = 'REPORT';\n HttpParser.METHODS[17] = 'MKACTIVITY';\n HttpParser.METHODS[18] = 'CHECKOUT';\n HttpParser.METHODS[19] = 'MERGE';\n HttpParser.METHODS[20] = 'M-SEARCH';\n HttpParser.METHODS[21] = 'NOTIFY';\n HttpParser.METHODS[22] = 'SUBSCRIBE';\n HttpParser.METHODS[23] = 'UNSUBSCRIBE';\n HttpParser.METHODS[24] = 'PATCH';\n HttpParser.METHODS[25] = 'PURGE';\n}\n\nHttpParser.prototype.isComplete = function() {\n return this._complete;\n};\n\nHttpParser.prototype.parse = function(chunk) {\n var consumed = this._parser.execute(chunk, 0, chunk.length);\n\n if (typeof consumed !== 'number') {\n this.error = consumed;\n this._complete = true;\n return;\n }\n\n if (this._complete)\n this.body = (consumed < chunk.length)\n ? chunk.slice(consumed)\n : Buffer.alloc(0);\n};\n\nmodule.exports = HttpParser;\n","'use strict';\n\nvar Stream = require('stream').Stream,\n util = require('util'),\n driver = require('websocket-driver'),\n EventTarget = require('./api/event_target'),\n Event = require('./api/event');\n\nvar API = function(options) {\n options = options || {};\n driver.validateOptions(options, ['headers', 'extensions', 'maxLength', 'ping', 'proxy', 'tls', 'ca']);\n\n this.readable = this.writable = true;\n\n var headers = options.headers;\n if (headers) {\n for (var name in headers) this._driver.setHeader(name, headers[name]);\n }\n\n var extensions = options.extensions;\n if (extensions) {\n [].concat(extensions).forEach(this._driver.addExtension, this._driver);\n }\n\n this._ping = options.ping;\n this._pingId = 0;\n this.readyState = API.CONNECTING;\n this.bufferedAmount = 0;\n this.protocol = '';\n this.url = this._driver.url;\n this.version = this._driver.version;\n\n var self = this;\n\n this._driver.on('open', function(e) { self._open() });\n this._driver.on('message', function(e) { self._receiveMessage(e.data) });\n this._driver.on('close', function(e) { self._beginClose(e.reason, e.code) });\n\n this._driver.on('error', function(error) {\n self._emitError(error.message);\n });\n this.on('error', function() {});\n\n this._driver.messages.on('drain', function() {\n self.emit('drain');\n });\n\n if (this._ping)\n this._pingTimer = setInterval(function() {\n self._pingId += 1;\n self.ping(self._pingId.toString());\n }, this._ping * 1000);\n\n this._configureStream();\n\n if (!this._proxy) {\n this._stream.pipe(this._driver.io);\n this._driver.io.pipe(this._stream);\n }\n};\nutil.inherits(API, Stream);\n\nAPI.CONNECTING = 0;\nAPI.OPEN = 1;\nAPI.CLOSING = 2;\nAPI.CLOSED = 3;\n\nAPI.CLOSE_TIMEOUT = 30000;\n\nvar instance = {\n write: function(data) {\n return this.send(data);\n },\n\n end: function(data) {\n if (data !== undefined) this.send(data);\n this.close();\n },\n\n pause: function() {\n return this._driver.messages.pause();\n },\n\n resume: function() {\n return this._driver.messages.resume();\n },\n\n send: function(data) {\n if (this.readyState > API.OPEN) return false;\n if (!(data instanceof Buffer)) data = String(data);\n return this._driver.messages.write(data);\n },\n\n ping: function(message, callback) {\n if (this.readyState > API.OPEN) return false;\n return this._driver.ping(message, callback);\n },\n\n close: function(code, reason) {\n if (code === undefined) code = 1000;\n if (reason === undefined) reason = '';\n\n if (code !== 1000 && (code < 3000 || code > 4999))\n throw new Error(\"Failed to execute 'close' on WebSocket: \" +\n \"The code must be either 1000, or between 3000 and 4999. \" +\n code + \" is neither.\");\n\n if (this.readyState !== API.CLOSED) this.readyState = API.CLOSING;\n var self = this;\n\n this._closeTimer = setTimeout(function() {\n self._beginClose('', 1006);\n }, API.CLOSE_TIMEOUT);\n\n this._driver.close(reason, code);\n },\n\n _configureStream: function() {\n var self = this;\n\n this._stream.setTimeout(0);\n this._stream.setNoDelay(true);\n\n ['close', 'end'].forEach(function(event) {\n this._stream.on(event, function() { self._finalizeClose() });\n }, this);\n\n this._stream.on('error', function(error) {\n self._emitError('Network error: ' + self.url + ': ' + error.message);\n self._finalizeClose();\n });\n },\n\n _open: function() {\n if (this.readyState !== API.CONNECTING) return;\n\n this.readyState = API.OPEN;\n this.protocol = this._driver.protocol || '';\n\n var event = new Event('open');\n event.initEvent('open', false, false);\n this.dispatchEvent(event);\n },\n\n _receiveMessage: function(data) {\n if (this.readyState > API.OPEN) return false;\n\n if (this.readable) this.emit('data', data);\n\n var event = new Event('message', {data: data});\n event.initEvent('message', false, false);\n this.dispatchEvent(event);\n },\n\n _emitError: function(message) {\n if (this.readyState >= API.CLOSING) return;\n\n var event = new Event('error', {message: message});\n event.initEvent('error', false, false);\n this.dispatchEvent(event);\n },\n\n _beginClose: function(reason, code) {\n if (this.readyState === API.CLOSED) return;\n this.readyState = API.CLOSING;\n this._closeParams = [reason, code];\n\n if (this._stream) {\n this._stream.destroy();\n if (!this._stream.readable) this._finalizeClose();\n }\n },\n\n _finalizeClose: function() {\n if (this.readyState === API.CLOSED) return;\n this.readyState = API.CLOSED;\n\n if (this._closeTimer) clearTimeout(this._closeTimer);\n if (this._pingTimer) clearInterval(this._pingTimer);\n if (this._stream) this._stream.end();\n\n if (this.readable) this.emit('end');\n this.readable = this.writable = false;\n\n var reason = this._closeParams ? this._closeParams[0] : '',\n code = this._closeParams ? this._closeParams[1] : 1006;\n\n var event = new Event('close', {code: code, reason: reason});\n event.initEvent('close', false, false);\n this.dispatchEvent(event);\n }\n};\n\nfor (var method in instance) API.prototype[method] = instance[method];\nfor (var key in EventTarget) API.prototype[key] = EventTarget[key];\n\nmodule.exports = API;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n crypto = require('crypto'),\n util = require('util'),\n Extensions = require('websocket-extensions'),\n Base = require('./base'),\n Frame = require('./hybi/frame'),\n Message = require('./hybi/message');\n\nvar Hybi = function(request, url, options) {\n Base.apply(this, arguments);\n\n this._extensions = new Extensions();\n this._stage = 0;\n this._masking = this._options.masking;\n this._protocols = this._options.protocols || [];\n this._requireMasking = this._options.requireMasking;\n this._pingCallbacks = {};\n\n if (typeof this._protocols === 'string')\n this._protocols = this._protocols.split(/ *, */);\n\n if (!this._request) return;\n\n var protos = this._request.headers['sec-websocket-protocol'],\n supported = this._protocols;\n\n if (protos !== undefined) {\n if (typeof protos === 'string') protos = protos.split(/ *, */);\n this.protocol = protos.filter(function(p) { return supported.indexOf(p) >= 0 })[0];\n }\n\n this.version = 'hybi-' + Hybi.VERSION;\n};\nutil.inherits(Hybi, Base);\n\nHybi.VERSION = '13';\n\nHybi.mask = function(payload, mask, offset) {\n if (!mask || mask.length === 0) return payload;\n offset = offset || 0;\n\n for (var i = 0, n = payload.length - offset; i < n; i++) {\n payload[offset + i] = payload[offset + i] ^ mask[i % 4];\n }\n return payload;\n};\n\nHybi.generateAccept = function(key) {\n var sha1 = crypto.createHash('sha1');\n sha1.update(key + Hybi.GUID);\n return sha1.digest('base64');\n};\n\nHybi.GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';\n\nvar instance = {\n FIN: 0x80,\n MASK: 0x80,\n RSV1: 0x40,\n RSV2: 0x20,\n RSV3: 0x10,\n OPCODE: 0x0F,\n LENGTH: 0x7F,\n\n OPCODES: {\n continuation: 0,\n text: 1,\n binary: 2,\n close: 8,\n ping: 9,\n pong: 10\n },\n\n OPCODE_CODES: [0, 1, 2, 8, 9, 10],\n MESSAGE_OPCODES: [0, 1, 2],\n OPENING_OPCODES: [1, 2],\n\n ERRORS: {\n normal_closure: 1000,\n going_away: 1001,\n protocol_error: 1002,\n unacceptable: 1003,\n encoding_error: 1007,\n policy_violation: 1008,\n too_large: 1009,\n extension_error: 1010,\n unexpected_condition: 1011\n },\n\n ERROR_CODES: [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011],\n DEFAULT_ERROR_CODE: 1000,\n MIN_RESERVED_ERROR: 3000,\n MAX_RESERVED_ERROR: 4999,\n\n // http://www.w3.org/International/questions/qa-forms-utf-8.en.php\n UTF8_MATCH: /^([\\x00-\\x7F]|[\\xC2-\\xDF][\\x80-\\xBF]|\\xE0[\\xA0-\\xBF][\\x80-\\xBF]|[\\xE1-\\xEC\\xEE\\xEF][\\x80-\\xBF]{2}|\\xED[\\x80-\\x9F][\\x80-\\xBF]|\\xF0[\\x90-\\xBF][\\x80-\\xBF]{2}|[\\xF1-\\xF3][\\x80-\\xBF]{3}|\\xF4[\\x80-\\x8F][\\x80-\\xBF]{2})*$/,\n\n addExtension: function(extension) {\n this._extensions.add(extension);\n return true;\n },\n\n parse: function(chunk) {\n this._reader.put(chunk);\n var buffer = true;\n while (buffer) {\n switch (this._stage) {\n case 0:\n buffer = this._reader.read(1);\n if (buffer) this._parseOpcode(buffer[0]);\n break;\n\n case 1:\n buffer = this._reader.read(1);\n if (buffer) this._parseLength(buffer[0]);\n break;\n\n case 2:\n buffer = this._reader.read(this._frame.lengthBytes);\n if (buffer) this._parseExtendedLength(buffer);\n break;\n\n case 3:\n buffer = this._reader.read(4);\n if (buffer) {\n this._stage = 4;\n this._frame.maskingKey = buffer;\n }\n break;\n\n case 4:\n buffer = this._reader.read(this._frame.length);\n if (buffer) {\n this._stage = 0;\n this._emitFrame(buffer);\n }\n break;\n\n default:\n buffer = null;\n }\n }\n },\n\n text: function(message) {\n if (this.readyState > 1) return false;\n return this.frame(message, 'text');\n },\n\n binary: function(message) {\n if (this.readyState > 1) return false;\n return this.frame(message, 'binary');\n },\n\n ping: function(message, callback) {\n if (this.readyState > 1) return false;\n message = message || '';\n if (callback) this._pingCallbacks[message] = callback;\n return this.frame(message, 'ping');\n },\n\n pong: function(message) {\n if (this.readyState > 1) return false;\n message = message ||'';\n return this.frame(message, 'pong');\n },\n\n close: function(reason, code) {\n reason = reason || '';\n code = code || this.ERRORS.normal_closure;\n\n if (this.readyState <= 0) {\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(code, reason));\n return true;\n } else if (this.readyState === 1) {\n this.readyState = 2;\n this._extensions.close(function() { this.frame(reason, 'close', code) }, this);\n return true;\n } else {\n return false;\n }\n },\n\n frame: function(buffer, type, code) {\n if (this.readyState <= 0) return this._queue([buffer, type, code]);\n if (this.readyState > 2) return false;\n\n if (buffer instanceof Array) buffer = Buffer.from(buffer);\n if (typeof buffer === 'number') buffer = buffer.toString();\n\n var message = new Message(),\n isText = (typeof buffer === 'string'),\n payload, copy;\n\n message.rsv1 = message.rsv2 = message.rsv3 = false;\n message.opcode = this.OPCODES[type || (isText ? 'text' : 'binary')];\n\n payload = isText ? Buffer.from(buffer, 'utf8') : buffer;\n\n if (code) {\n copy = payload;\n payload = Buffer.allocUnsafe(2 + copy.length);\n payload.writeUInt16BE(code, 0);\n copy.copy(payload, 2);\n }\n message.data = payload;\n\n var onMessageReady = function(message) {\n var frame = new Frame();\n\n frame.final = true;\n frame.rsv1 = message.rsv1;\n frame.rsv2 = message.rsv2;\n frame.rsv3 = message.rsv3;\n frame.opcode = message.opcode;\n frame.masked = !!this._masking;\n frame.length = message.data.length;\n frame.payload = message.data;\n\n if (frame.masked) frame.maskingKey = crypto.randomBytes(4);\n\n this._sendFrame(frame);\n };\n\n if (this.MESSAGE_OPCODES.indexOf(message.opcode) >= 0)\n this._extensions.processOutgoingMessage(message, function(error, message) {\n if (error) return this._fail('extension_error', error.message);\n onMessageReady.call(this, message);\n }, this);\n else\n onMessageReady.call(this, message);\n\n return true;\n },\n\n _sendFrame: function(frame) {\n var length = frame.length,\n header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10),\n offset = header + (frame.masked ? 4 : 0),\n buffer = Buffer.allocUnsafe(offset + length),\n masked = frame.masked ? this.MASK : 0;\n\n buffer[0] = (frame.final ? this.FIN : 0) |\n (frame.rsv1 ? this.RSV1 : 0) |\n (frame.rsv2 ? this.RSV2 : 0) |\n (frame.rsv3 ? this.RSV3 : 0) |\n frame.opcode;\n\n if (length <= 125) {\n buffer[1] = masked | length;\n } else if (length <= 65535) {\n buffer[1] = masked | 126;\n buffer.writeUInt16BE(length, 2);\n } else {\n buffer[1] = masked | 127;\n buffer.writeUInt32BE(Math.floor(length / 0x100000000), 2);\n buffer.writeUInt32BE(length % 0x100000000, 6);\n }\n\n frame.payload.copy(buffer, offset);\n\n if (frame.masked) {\n frame.maskingKey.copy(buffer, header);\n Hybi.mask(buffer, frame.maskingKey, offset);\n }\n\n this._write(buffer);\n },\n\n _handshakeResponse: function() {\n var secKey = this._request.headers['sec-websocket-key'],\n version = this._request.headers['sec-websocket-version'];\n\n if (version !== Hybi.VERSION)\n throw new Error('Unsupported WebSocket version: ' + version);\n\n if (typeof secKey !== 'string')\n throw new Error('Missing handshake request header: Sec-WebSocket-Key');\n\n this._headers.set('Upgrade', 'websocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey));\n\n if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol);\n\n var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']);\n if (extensions) this._headers.set('Sec-WebSocket-Extensions', extensions);\n\n var start = 'HTTP/1.1 101 Switching Protocols',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _shutdown: function(code, reason, error) {\n delete this._frame;\n delete this._message;\n this._stage = 5;\n\n var sendCloseFrame = (this.readyState === 1);\n this.readyState = 2;\n\n this._extensions.close(function() {\n if (sendCloseFrame) this.frame(reason, 'close', code);\n this.readyState = 3;\n if (error) this.emit('error', new Error(reason));\n this.emit('close', new Base.CloseEvent(code, reason));\n }, this);\n },\n\n _fail: function(type, message) {\n if (this.readyState > 1) return;\n this._shutdown(this.ERRORS[type], message, true);\n },\n\n _parseOpcode: function(octet) {\n var rsvs = [this.RSV1, this.RSV2, this.RSV3].map(function(rsv) {\n return (octet & rsv) === rsv;\n });\n\n var frame = this._frame = new Frame();\n\n frame.final = (octet & this.FIN) === this.FIN;\n frame.rsv1 = rsvs[0];\n frame.rsv2 = rsvs[1];\n frame.rsv3 = rsvs[2];\n frame.opcode = (octet & this.OPCODE);\n\n this._stage = 1;\n\n if (!this._extensions.validFrameRsv(frame))\n return this._fail('protocol_error',\n 'One or more reserved bits are on: reserved1 = ' + (frame.rsv1 ? 1 : 0) +\n ', reserved2 = ' + (frame.rsv2 ? 1 : 0) +\n ', reserved3 = ' + (frame.rsv3 ? 1 : 0));\n\n if (this.OPCODE_CODES.indexOf(frame.opcode) < 0)\n return this._fail('protocol_error', 'Unrecognized frame opcode: ' + frame.opcode);\n\n if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && !frame.final)\n return this._fail('protocol_error', 'Received fragmented control frame: opcode = ' + frame.opcode);\n\n if (this._message && this.OPENING_OPCODES.indexOf(frame.opcode) >= 0)\n return this._fail('protocol_error', 'Received new data frame but previous continuous frame is unfinished');\n },\n\n _parseLength: function(octet) {\n var frame = this._frame;\n frame.masked = (octet & this.MASK) === this.MASK;\n frame.length = (octet & this.LENGTH);\n\n if (frame.length >= 0 && frame.length <= 125) {\n this._stage = frame.masked ? 3 : 4;\n if (!this._checkFrameLength()) return;\n } else {\n this._stage = 2;\n frame.lengthBytes = (frame.length === 126 ? 2 : 8);\n }\n\n if (this._requireMasking && !frame.masked)\n return this._fail('unacceptable', 'Received unmasked frame but masking is required');\n },\n\n _parseExtendedLength: function(buffer) {\n var frame = this._frame;\n frame.length = this._readUInt(buffer);\n\n this._stage = frame.masked ? 3 : 4;\n\n if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && frame.length > 125)\n return this._fail('protocol_error', 'Received control frame having too long payload: ' + frame.length);\n\n if (!this._checkFrameLength()) return;\n },\n\n _checkFrameLength: function() {\n var length = this._message ? this._message.length : 0;\n\n if (length + this._frame.length > this._maxLength) {\n this._fail('too_large', 'WebSocket frame length too large');\n return false;\n } else {\n return true;\n }\n },\n\n _emitFrame: function(buffer) {\n var frame = this._frame,\n payload = frame.payload = Hybi.mask(buffer, frame.maskingKey),\n opcode = frame.opcode,\n message,\n code, reason,\n callbacks, callback;\n\n delete this._frame;\n\n if (opcode === this.OPCODES.continuation) {\n if (!this._message) return this._fail('protocol_error', 'Received unexpected continuation frame');\n this._message.pushFrame(frame);\n }\n\n if (opcode === this.OPCODES.text || opcode === this.OPCODES.binary) {\n this._message = new Message();\n this._message.pushFrame(frame);\n }\n\n if (frame.final && this.MESSAGE_OPCODES.indexOf(opcode) >= 0)\n return this._emitMessage(this._message);\n\n if (opcode === this.OPCODES.close) {\n code = (payload.length >= 2) ? payload.readUInt16BE(0) : null;\n reason = (payload.length > 2) ? this._encode(payload.slice(2)) : null;\n\n if (!(payload.length === 0) &&\n !(code !== null && code >= this.MIN_RESERVED_ERROR && code <= this.MAX_RESERVED_ERROR) &&\n this.ERROR_CODES.indexOf(code) < 0)\n code = this.ERRORS.protocol_error;\n\n if (payload.length > 125 || (payload.length > 2 && !reason))\n code = this.ERRORS.protocol_error;\n\n this._shutdown(code || this.DEFAULT_ERROR_CODE, reason || '');\n }\n\n if (opcode === this.OPCODES.ping) {\n this.frame(payload, 'pong');\n this.emit('ping', new Base.PingEvent(payload.toString()))\n }\n\n if (opcode === this.OPCODES.pong) {\n callbacks = this._pingCallbacks;\n message = this._encode(payload);\n callback = callbacks[message];\n\n delete callbacks[message];\n if (callback) callback()\n\n this.emit('pong', new Base.PongEvent(payload.toString()))\n }\n },\n\n _emitMessage: function(message) {\n var message = this._message;\n message.read();\n\n delete this._message;\n\n this._extensions.processIncomingMessage(message, function(error, message) {\n if (error) return this._fail('extension_error', error.message);\n\n var payload = message.data;\n if (message.opcode === this.OPCODES.text) payload = this._encode(payload);\n\n if (payload === null)\n return this._fail('encoding_error', 'Could not decode a text frame as UTF-8');\n else\n this.emit('message', new Base.MessageEvent(payload));\n }, this);\n },\n\n _encode: function(buffer) {\n try {\n var string = buffer.toString('binary', 0, buffer.length);\n if (!this.UTF8_MATCH.test(string)) return null;\n } catch (e) {}\n return buffer.toString('utf8', 0, buffer.length);\n },\n\n _readUInt: function(buffer) {\n if (buffer.length === 2) return buffer.readUInt16BE(0);\n\n return buffer.readUInt32BE(0) * 0x100000000 +\n buffer.readUInt32BE(4);\n }\n};\n\nfor (var key in instance)\n Hybi.prototype[key] = instance[key];\n\nmodule.exports = Hybi;\n","'use strict';\n\nvar RingBuffer = function(bufferSize) {\n this._bufferSize = bufferSize;\n this.clear();\n};\n\nRingBuffer.prototype.clear = function() {\n this._buffer = new Array(this._bufferSize);\n this._ringOffset = 0;\n this._ringSize = this._bufferSize;\n this._head = 0;\n this._tail = 0;\n this.length = 0;\n};\n\nRingBuffer.prototype.push = function(value) {\n var expandBuffer = false,\n expandRing = false;\n\n if (this._ringSize < this._bufferSize) {\n expandBuffer = (this._tail === 0);\n } else if (this._ringOffset === this._ringSize) {\n expandBuffer = true;\n expandRing = (this._tail === 0);\n }\n\n if (expandBuffer) {\n this._tail = this._bufferSize;\n this._buffer = this._buffer.concat(new Array(this._bufferSize));\n this._bufferSize = this._buffer.length;\n\n if (expandRing)\n this._ringSize = this._bufferSize;\n }\n\n this._buffer[this._tail] = value;\n this.length += 1;\n if (this._tail < this._ringSize) this._ringOffset += 1;\n this._tail = (this._tail + 1) % this._bufferSize;\n};\n\nRingBuffer.prototype.peek = function() {\n if (this.length === 0) return void 0;\n return this._buffer[this._head];\n};\n\nRingBuffer.prototype.shift = function() {\n if (this.length === 0) return void 0;\n\n var value = this._buffer[this._head];\n this._buffer[this._head] = void 0;\n this.length -= 1;\n this._ringOffset -= 1;\n\n if (this._ringOffset === 0 && this.length > 0) {\n this._head = this._ringSize;\n this._ringOffset = this.length;\n this._ringSize = this._bufferSize;\n } else {\n this._head = (this._head + 1) % this._ringSize;\n }\n return value;\n};\n\nmodule.exports = RingBuffer;\n","'use strict';\n\nvar RingBuffer = require('./ring_buffer');\n\nvar Pledge = function() {\n this._complete = false;\n this._callbacks = new RingBuffer(Pledge.QUEUE_SIZE);\n};\n\nPledge.QUEUE_SIZE = 4;\n\nPledge.all = function(list) {\n var pledge = new Pledge(),\n pending = list.length,\n n = pending;\n\n if (pending === 0) pledge.done();\n\n while (n--) list[n].then(function() {\n pending -= 1;\n if (pending === 0) pledge.done();\n });\n return pledge;\n};\n\nPledge.prototype.then = function(callback) {\n if (this._complete) callback();\n else this._callbacks.push(callback);\n};\n\nPledge.prototype.done = function() {\n this._complete = true;\n var callbacks = this._callbacks, callback;\n while (callback = callbacks.shift()) callback();\n};\n\nmodule.exports = Pledge;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Base = require('./base'),\n util = require('util');\n\nvar Draft75 = function(request, url, options) {\n Base.apply(this, arguments);\n this._stage = 0;\n this.version = 'hixie-75';\n\n this._headers.set('Upgrade', 'WebSocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('WebSocket-Origin', this._request.headers.origin);\n this._headers.set('WebSocket-Location', this.url);\n};\nutil.inherits(Draft75, Base);\n\nvar instance = {\n close: function() {\n if (this.readyState === 3) return false;\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n parse: function(chunk) {\n if (this.readyState > 1) return;\n\n this._reader.put(chunk);\n\n this._reader.eachByte(function(octet) {\n var message;\n\n switch (this._stage) {\n case -1:\n this._body.push(octet);\n this._sendHandshakeBody();\n break;\n\n case 0:\n this._parseLeadingByte(octet);\n break;\n\n case 1:\n this._length = (octet & 0x7F) + 128 * this._length;\n\n if (this._closing && this._length === 0) {\n return this.close();\n }\n else if ((octet & 0x80) !== 0x80) {\n if (this._length === 0) {\n this._stage = 0;\n }\n else {\n this._skipped = 0;\n this._stage = 2;\n }\n }\n break;\n\n case 2:\n if (octet === 0xFF) {\n this._stage = 0;\n message = Buffer.from(this._buffer).toString('utf8', 0, this._buffer.length);\n this.emit('message', new Base.MessageEvent(message));\n }\n else {\n if (this._length) {\n this._skipped += 1;\n if (this._skipped === this._length)\n this._stage = 0;\n } else {\n this._buffer.push(octet);\n if (this._buffer.length > this._maxLength) return this.close();\n }\n }\n break;\n }\n }, this);\n },\n\n frame: function(buffer) {\n if (this.readyState === 0) return this._queue([buffer]);\n if (this.readyState > 1) return false;\n\n if (typeof buffer !== 'string') buffer = buffer.toString();\n\n var length = Buffer.byteLength(buffer),\n frame = Buffer.allocUnsafe(length + 2);\n\n frame[0] = 0x00;\n frame.write(buffer, 1);\n frame[frame.length - 1] = 0xFF;\n\n this._write(frame);\n return true;\n },\n\n _handshakeResponse: function() {\n var start = 'HTTP/1.1 101 Web Socket Protocol Handshake',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _parseLeadingByte: function(octet) {\n if ((octet & 0x80) === 0x80) {\n this._length = 0;\n this._stage = 1;\n } else {\n delete this._length;\n delete this._skipped;\n this._buffer = [];\n this._stage = 2;\n }\n }\n};\n\nfor (var key in instance)\n Draft75.prototype[key] = instance[key];\n\nmodule.exports = Draft75;\n","'use strict';\n\nvar Event = require('./event');\n\nvar EventTarget = {\n onopen: null,\n onmessage: null,\n onerror: null,\n onclose: null,\n\n addEventListener: function(eventType, listener, useCapture) {\n this.on(eventType, listener);\n },\n\n removeEventListener: function(eventType, listener, useCapture) {\n this.removeListener(eventType, listener);\n },\n\n dispatchEvent: function(event) {\n event.target = event.currentTarget = this;\n event.eventPhase = Event.AT_TARGET;\n\n if (this['on' + event.type])\n this['on' + event.type](event);\n\n this.emit(event.type, event);\n }\n};\n\nmodule.exports = EventTarget;\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// API references:\n//\n// * https://html.spec.whatwg.org/multipage/comms.html#network\n// * https://dom.spec.whatwg.org/#interface-eventtarget\n// * https://dom.spec.whatwg.org/#interface-event\n\n'use strict';\n\nvar util = require('util'),\n driver = require('websocket-driver'),\n API = require('./websocket/api');\n\nvar WebSocket = function(request, socket, body, protocols, options) {\n options = options || {};\n\n this._stream = socket;\n this._driver = driver.http(request, {maxLength: options.maxLength, protocols: protocols});\n\n var self = this;\n if (!this._stream || !this._stream.writable) return;\n if (!this._stream.readable) return this._stream.end();\n\n var catchup = function() { self._stream.removeListener('data', catchup) };\n this._stream.on('data', catchup);\n\n API.call(this, options);\n\n process.nextTick(function() {\n self._driver.start();\n self._driver.io.write(body);\n });\n};\nutil.inherits(WebSocket, API);\n\nWebSocket.isWebSocket = function(request) {\n return driver.isWebSocket(request);\n};\n\nWebSocket.validateOptions = function(options, validKeys) {\n driver.validateOptions(options, validKeys);\n};\n\nWebSocket.WebSocket = WebSocket;\nWebSocket.Client = require('./websocket/client');\nWebSocket.EventSource = require('./eventsource');\n\nmodule.exports = WebSocket;\n","/**\n * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object.\n *\n * This can be used with JS designed for browsers to improve reuse of code and\n * allow the use of existing libraries.\n *\n * Usage: include(\"XMLHttpRequest.js\") and use XMLHttpRequest per W3C specs.\n *\n * @author Dan DeFelippi \n * @contributor David Ellis \n * @license MIT\n */\n\nvar Url = require(\"url\");\nvar spawn = require(\"child_process\").spawn;\nvar fs = require(\"fs\");\n\nexports.XMLHttpRequest = function() {\n \"use strict\";\n\n /**\n * Private variables\n */\n var self = this;\n var http = require(\"http\");\n var https = require(\"https\");\n\n // Holds http.js objects\n var request;\n var response;\n\n // Request settings\n var settings = {};\n\n // Disable header blacklist.\n // Not part of XHR specs.\n var disableHeaderCheck = false;\n\n // Set some default headers\n var defaultHeaders = {\n \"User-Agent\": \"node-XMLHttpRequest\",\n \"Accept\": \"*/*\",\n };\n\n var headers = {};\n var headersCase = {};\n\n // These headers are not user setable.\n // The following are allowed but banned in the spec:\n // * user-agent\n var forbiddenRequestHeaders = [\n \"accept-charset\",\n \"accept-encoding\",\n \"access-control-request-headers\",\n \"access-control-request-method\",\n \"connection\",\n \"content-length\",\n \"content-transfer-encoding\",\n \"cookie\",\n \"cookie2\",\n \"date\",\n \"expect\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"referer\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"via\"\n ];\n\n // These request methods are not allowed\n var forbiddenRequestMethods = [\n \"TRACE\",\n \"TRACK\",\n \"CONNECT\"\n ];\n\n // Send flag\n var sendFlag = false;\n // Error flag, used when errors occur or abort is called\n var errorFlag = false;\n\n // Event listeners\n var listeners = {};\n\n /**\n * Constants\n */\n\n this.UNSENT = 0;\n this.OPENED = 1;\n this.HEADERS_RECEIVED = 2;\n this.LOADING = 3;\n this.DONE = 4;\n\n /**\n * Public vars\n */\n\n // Current state\n this.readyState = this.UNSENT;\n\n // default ready state change handler in case one is not set or is set late\n this.onreadystatechange = null;\n\n // Result & response\n this.responseText = \"\";\n this.responseXML = \"\";\n this.status = null;\n this.statusText = null;\n \n // Whether cross-site Access-Control requests should be made using\n // credentials such as cookies or authorization headers\n this.withCredentials = false;\n\n /**\n * Private methods\n */\n\n /**\n * Check if the specified header is allowed.\n *\n * @param string header Header to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpHeader = function(header) {\n return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1);\n };\n\n /**\n * Check if the specified method is allowed.\n *\n * @param string method Request method to validate\n * @return boolean False if not allowed, otherwise true\n */\n var isAllowedHttpMethod = function(method) {\n return (method && forbiddenRequestMethods.indexOf(method) === -1);\n };\n\n /**\n * Public methods\n */\n\n /**\n * Open the connection. Currently supports local server requests.\n *\n * @param string method Connection method (eg GET, POST)\n * @param string url URL for the connection.\n * @param boolean async Asynchronous connection. Default is true.\n * @param string user Username for basic authentication (optional)\n * @param string password Password for basic authentication (optional)\n */\n this.open = function(method, url, async, user, password) {\n this.abort();\n errorFlag = false;\n\n // Check for valid request method\n if (!isAllowedHttpMethod(method)) {\n throw new Error(\"SecurityError: Request method not allowed\");\n }\n\n settings = {\n \"method\": method,\n \"url\": url.toString(),\n \"async\": (typeof async !== \"boolean\" ? true : async),\n \"user\": user || null,\n \"password\": password || null\n };\n\n setState(this.OPENED);\n };\n\n /**\n * Disables or enables isAllowedHttpHeader() check the request. Enabled by default.\n * This does not conform to the W3C spec.\n *\n * @param boolean state Enable or disable header checking.\n */\n this.setDisableHeaderCheck = function(state) {\n disableHeaderCheck = state;\n };\n\n /**\n * Sets a header for the request or appends the value if one is already set.\n *\n * @param string header Header name\n * @param string value Header value\n */\n this.setRequestHeader = function(header, value) {\n if (this.readyState !== this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN\");\n }\n if (!isAllowedHttpHeader(header)) {\n console.warn(\"Refused to set unsafe header \\\"\" + header + \"\\\"\");\n return;\n }\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send flag is true\");\n }\n header = headersCase[header.toLowerCase()] || header;\n headersCase[header.toLowerCase()] = header;\n headers[header] = headers[header] ? headers[header] + ', ' + value : value;\n };\n\n /**\n * Gets a header from the server response.\n *\n * @param string header Name of header to get.\n * @return string Text of the header or null if it doesn't exist.\n */\n this.getResponseHeader = function(header) {\n if (typeof header === \"string\"\n && this.readyState > this.OPENED\n && response\n && response.headers\n && response.headers[header.toLowerCase()]\n && !errorFlag\n ) {\n return response.headers[header.toLowerCase()];\n }\n\n return null;\n };\n\n /**\n * Gets all the response headers.\n *\n * @return string A string with all response headers separated by CR+LF\n */\n this.getAllResponseHeaders = function() {\n if (this.readyState < this.HEADERS_RECEIVED || errorFlag) {\n return \"\";\n }\n var result = \"\";\n\n for (var i in response.headers) {\n // Cookie headers are excluded\n if (i !== \"set-cookie\" && i !== \"set-cookie2\") {\n result += i + \": \" + response.headers[i] + \"\\r\\n\";\n }\n }\n return result.substr(0, result.length - 2);\n };\n\n /**\n * Gets a request header\n *\n * @param string name Name of header to get\n * @return string Returns the request header or empty string if not set\n */\n this.getRequestHeader = function(name) {\n if (typeof name === \"string\" && headersCase[name.toLowerCase()]) {\n return headers[headersCase[name.toLowerCase()]];\n }\n\n return \"\";\n };\n\n /**\n * Sends the request to the server.\n *\n * @param string data Optional data to send as request body.\n */\n this.send = function(data) {\n if (this.readyState !== this.OPENED) {\n throw new Error(\"INVALID_STATE_ERR: connection must be opened before send() is called\");\n }\n\n if (sendFlag) {\n throw new Error(\"INVALID_STATE_ERR: send has already been called\");\n }\n\n var ssl = false, local = false;\n var url = Url.parse(settings.url);\n var host;\n // Determine the server\n switch (url.protocol) {\n case \"https:\":\n ssl = true;\n // SSL & non-SSL both need host, no break here.\n case \"http:\":\n host = url.hostname;\n break;\n\n case \"file:\":\n local = true;\n break;\n\n case undefined:\n case null:\n case \"\":\n host = \"localhost\";\n break;\n\n default:\n throw new Error(\"Protocol not supported.\");\n }\n\n // Load files off the local filesystem (file://)\n if (local) {\n if (settings.method !== \"GET\") {\n throw new Error(\"XMLHttpRequest: Only GET method is supported\");\n }\n\n if (settings.async) {\n fs.readFile(url.pathname, \"utf8\", function(error, data) {\n if (error) {\n self.handleError(error);\n } else {\n self.status = 200;\n self.responseText = data;\n setState(self.DONE);\n }\n });\n } else {\n try {\n this.responseText = fs.readFileSync(url.pathname, \"utf8\");\n this.status = 200;\n setState(self.DONE);\n } catch(e) {\n this.handleError(e);\n }\n }\n\n return;\n }\n\n // Default to port 80. If accessing localhost on another port be sure\n // to use http://localhost:port/path\n var port = url.port || (ssl ? 443 : 80);\n // Add query string if one is used\n var uri = url.pathname + (url.search ? url.search : \"\");\n\n // Set the defaults if they haven't been set\n for (var name in defaultHeaders) {\n if (!headersCase[name.toLowerCase()]) {\n headers[name] = defaultHeaders[name];\n }\n }\n\n // Set the Host header or the server may reject the request\n headers.Host = host;\n if (!((ssl && port === 443) || port === 80)) {\n headers.Host += \":\" + url.port;\n }\n\n // Set Basic Auth if necessary\n if (settings.user) {\n if (typeof settings.password === \"undefined\") {\n settings.password = \"\";\n }\n var authBuf = new Buffer(settings.user + \":\" + settings.password);\n headers.Authorization = \"Basic \" + authBuf.toString(\"base64\");\n }\n\n // Set content length header\n if (settings.method === \"GET\" || settings.method === \"HEAD\") {\n data = null;\n } else if (data) {\n headers[\"Content-Length\"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);\n\n if (!headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\n }\n } else if (settings.method === \"POST\") {\n // For a post with no data set Content-Length: 0.\n // This is required by buggy servers that don't meet the specs.\n headers[\"Content-Length\"] = 0;\n }\n\n var options = {\n host: host,\n port: port,\n path: uri,\n method: settings.method,\n headers: headers,\n agent: false,\n withCredentials: self.withCredentials\n };\n\n // Reset error flag\n errorFlag = false;\n\n // Handle async requests\n if (settings.async) {\n // Use the proper protocol\n var doRequest = ssl ? https.request : http.request;\n\n // Request is being sent, set send flag\n sendFlag = true;\n\n // As per spec, this is called here for historical reasons.\n self.dispatchEvent(\"readystatechange\");\n\n // Handler for the response\n var responseHandler = function responseHandler(resp) {\n // Set response var to the response we got back\n // This is so it remains accessable outside this scope\n response = resp;\n // Check for redirect\n // @TODO Prevent looped redirects\n if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n // Change URL to the redirect location\n settings.url = response.headers.location;\n var url = Url.parse(settings.url);\n // Set host var in case it's used later\n host = url.hostname;\n // Options for the new request\n var newOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.path,\n method: response.statusCode === 303 ? \"GET\" : settings.method,\n headers: headers,\n withCredentials: self.withCredentials\n };\n\n // Issue the new request\n request = doRequest(newOptions, responseHandler).on(\"error\", errorHandler);\n request.end();\n // @TODO Check if an XHR event needs to be fired here\n return;\n }\n\n response.setEncoding(\"utf8\");\n\n setState(self.HEADERS_RECEIVED);\n self.status = response.statusCode;\n\n response.on(\"data\", function(chunk) {\n // Make sure there's some data\n if (chunk) {\n self.responseText += chunk;\n }\n // Don't emit state changes if the connection has been aborted.\n if (sendFlag) {\n setState(self.LOADING);\n }\n });\n\n response.on(\"end\", function() {\n if (sendFlag) {\n // Discard the end event if the connection has been aborted\n setState(self.DONE);\n sendFlag = false;\n }\n });\n\n response.on(\"error\", function(error) {\n self.handleError(error);\n });\n };\n\n // Error handler for the request\n var errorHandler = function errorHandler(error) {\n self.handleError(error);\n };\n\n // Create the request\n request = doRequest(options, responseHandler).on(\"error\", errorHandler);\n\n // Node 0.4 and later won't accept empty data. Make sure it's needed.\n if (data) {\n request.write(data);\n }\n\n request.end();\n\n self.dispatchEvent(\"loadstart\");\n } else { // Synchronous\n // Create a temporary file for communication with the other Node process\n var contentFile = \".node-xmlhttprequest-content-\" + process.pid;\n var syncFile = \".node-xmlhttprequest-sync-\" + process.pid;\n fs.writeFileSync(syncFile, \"\", \"utf8\");\n // The async request the other Node process executes\n var execString = \"var http = require('http'), https = require('https'), fs = require('fs');\"\n + \"var doRequest = http\" + (ssl ? \"s\" : \"\") + \".request;\"\n + \"var options = \" + JSON.stringify(options) + \";\"\n + \"var responseText = '';\"\n + \"var req = doRequest(options, function(response) {\"\n + \"response.setEncoding('utf8');\"\n + \"response.on('data', function(chunk) {\"\n + \" responseText += chunk;\"\n + \"});\"\n + \"response.on('end', function() {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText}}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"response.on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: error}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + \"}).on('error', function(error) {\"\n + \"fs.writeFileSync('\" + contentFile + \"', JSON.stringify({err: error}), 'utf8');\"\n + \"fs.unlinkSync('\" + syncFile + \"');\"\n + \"});\"\n + (data ? \"req.write('\" + JSON.stringify(data).slice(1,-1).replace(/'/g, \"\\\\'\") + \"');\":\"\")\n + \"req.end();\";\n // Start the other Node Process, executing this string\n var syncProc = spawn(process.argv[0], [\"-e\", execString]);\n while(fs.existsSync(syncFile)) {\n // Wait while the sync file is empty\n }\n var resp = JSON.parse(fs.readFileSync(contentFile, 'utf8'));\n // Kill the child process once the file has data\n syncProc.stdin.end();\n // Remove the temporary file\n fs.unlinkSync(contentFile);\n\n if (resp.err) {\n self.handleError(resp.err);\n } else {\n response = resp.data;\n self.status = resp.data.statusCode;\n self.responseText = resp.data.text;\n setState(self.DONE);\n }\n }\n };\n\n /**\n * Called when an error is encountered to deal with it.\n */\n this.handleError = function(error) {\n this.status = 0;\n this.statusText = error;\n this.responseText = error.stack;\n errorFlag = true;\n setState(this.DONE);\n this.dispatchEvent('error');\n };\n\n /**\n * Aborts a request.\n */\n this.abort = function() {\n if (request) {\n request.abort();\n request = null;\n }\n\n headers = defaultHeaders;\n this.status = 0;\n this.responseText = \"\";\n this.responseXML = \"\";\n\n errorFlag = true;\n\n if (this.readyState !== this.UNSENT\n && (this.readyState !== this.OPENED || sendFlag)\n && this.readyState !== this.DONE) {\n sendFlag = false;\n setState(this.DONE);\n }\n this.readyState = this.UNSENT;\n this.dispatchEvent('abort');\n };\n\n /**\n * Adds an event listener. Preferred method of binding to events.\n */\n this.addEventListener = function(event, callback) {\n if (!(event in listeners)) {\n listeners[event] = [];\n }\n // Currently allows duplicate callbacks. Should it?\n listeners[event].push(callback);\n };\n\n /**\n * Remove an event callback that has already been bound.\n * Only works on the matching funciton, cannot be a copy.\n */\n this.removeEventListener = function(event, callback) {\n if (event in listeners) {\n // Filter will return a new array with the callback removed\n listeners[event] = listeners[event].filter(function(ev) {\n return ev !== callback;\n });\n }\n };\n\n /**\n * Dispatch any events, including both \"on\" methods and events attached using addEventListener.\n */\n this.dispatchEvent = function(event) {\n if (typeof self[\"on\" + event] === \"function\") {\n self[\"on\" + event]();\n }\n if (event in listeners) {\n for (var i = 0, len = listeners[event].length; i < len; i++) {\n listeners[event][i].call(self);\n }\n }\n };\n\n /**\n * Changes readyState and calls onreadystatechange.\n *\n * @param int state New state\n */\n var setState = function(state) {\n if (state == self.LOADING || self.readyState !== state) {\n self.readyState = state;\n\n if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) {\n self.dispatchEvent(\"readystatechange\");\n }\n\n if (self.readyState === self.DONE && !errorFlag) {\n self.dispatchEvent(\"load\");\n // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)\n self.dispatchEvent(\"loadend\");\n }\n }\n };\n};\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","module.exports = require(\"buffer\");","module.exports = require(\"events\");","'use strict';\n\n/**\n\nStreams in a WebSocket connection\n---------------------------------\n\nWe model a WebSocket as two duplex streams: one stream is for the wire protocol\nover an I/O socket, and the other is for incoming/outgoing messages.\n\n\n +----------+ +---------+ +----------+\n [1] write(chunk) -->| ~~~~~~~~ +----->| parse() +----->| ~~~~~~~~ +--> emit('data') [2]\n | | +----+----+ | |\n | | | | |\n | IO | | [5] | Messages |\n | | V | |\n | | +---------+ | |\n [4] emit('data') <--+ ~~~~~~~~ |<-----+ frame() |<-----+ ~~~~~~~~ |<-- write(chunk) [3]\n +----------+ +---------+ +----------+\n\n\nMessage transfer in each direction is simple: IO receives a byte stream [1] and\nsends this stream for parsing. The parser will periodically emit a complete\nmessage text on the Messages stream [2]. Similarly, when messages are written\nto the Messages stream [3], they are framed using the WebSocket wire format and\nemitted via IO [4].\n\nThere is a feedback loop via [5] since some input from [1] will be things like\nping, pong and close frames. In these cases the protocol responds by emitting\nresponses directly back to [4] rather than emitting messages via [2].\n\nFor the purposes of flow control, we consider the sources of each Readable\nstream to be as follows:\n\n* [2] receives input from [1]\n* [4] receives input from [1] and [3]\n\nThe classes below express the relationships described above without prescribing\nanything about how parse() and frame() work, other than assuming they emit\n'data' events to the IO and Messages streams. They will work with any protocol\ndriver having these two methods.\n**/\n\n\nvar Stream = require('stream').Stream,\n util = require('util');\n\n\nvar IO = function(driver) {\n this.readable = this.writable = true;\n this._paused = false;\n this._driver = driver;\n};\nutil.inherits(IO, Stream);\n\n// The IO pause() and resume() methods will be called when the socket we are\n// piping to gets backed up and drains. Since IO output [4] comes from IO input\n// [1] and Messages input [3], we need to tell both of those to return false\n// from write() when this stream is paused.\n\nIO.prototype.pause = function() {\n this._paused = true;\n this._driver.messages._paused = true;\n};\n\nIO.prototype.resume = function() {\n this._paused = false;\n this.emit('drain');\n\n var messages = this._driver.messages;\n messages._paused = false;\n messages.emit('drain');\n};\n\n// When we receive input from a socket, send it to the parser and tell the\n// source whether to back off.\nIO.prototype.write = function(chunk) {\n if (!this.writable) return false;\n this._driver.parse(chunk);\n return !this._paused;\n};\n\n// The IO end() method will be called when the socket piping into it emits\n// 'close' or 'end', i.e. the socket is closed. In this situation the Messages\n// stream will not emit any more data so we emit 'end'.\nIO.prototype.end = function(chunk) {\n if (!this.writable) return;\n if (chunk !== undefined) this.write(chunk);\n this.writable = false;\n\n var messages = this._driver.messages;\n if (messages.readable) {\n messages.readable = messages.writable = false;\n messages.emit('end');\n }\n};\n\nIO.prototype.destroy = function() {\n this.end();\n};\n\n\nvar Messages = function(driver) {\n this.readable = this.writable = true;\n this._paused = false;\n this._driver = driver;\n};\nutil.inherits(Messages, Stream);\n\n// The Messages pause() and resume() methods will be called when the app that's\n// processing the messages gets backed up and drains. If we're emitting\n// messages too fast we should tell the source to slow down. Message output [2]\n// comes from IO input [1].\n\nMessages.prototype.pause = function() {\n this._driver.io._paused = true;\n};\n\nMessages.prototype.resume = function() {\n this._driver.io._paused = false;\n this._driver.io.emit('drain');\n};\n\n// When we receive messages from the user, send them to the formatter and tell\n// the source whether to back off.\nMessages.prototype.write = function(message) {\n if (!this.writable) return false;\n if (typeof message === 'string') this._driver.text(message);\n else this._driver.binary(message);\n return !this._paused;\n};\n\n// The Messages end() method will be called when a stream piping into it emits\n// 'end'. Many streams may be piped into the WebSocket and one of them ending\n// does not mean the whole socket is done, so just process the input and move\n// on leaving the socket open.\nMessages.prototype.end = function(message) {\n if (message !== undefined) this.write(message);\n};\n\nMessages.prototype.destroy = function() {};\n\n\nexports.IO = IO;\nexports.Messages = Messages;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar StreamReader = function() {\n this._queue = [];\n this._queueSize = 0;\n this._offset = 0;\n};\n\nStreamReader.prototype.put = function(buffer) {\n if (!buffer || buffer.length === 0) return;\n if (!Buffer.isBuffer(buffer)) buffer = Buffer.from(buffer);\n this._queue.push(buffer);\n this._queueSize += buffer.length;\n};\n\nStreamReader.prototype.read = function(length) {\n if (length > this._queueSize) return null;\n if (length === 0) return Buffer.alloc(0);\n\n this._queueSize -= length;\n\n var queue = this._queue,\n remain = length,\n first = queue[0],\n buffers, buffer;\n\n if (first.length >= length) {\n if (first.length === length) {\n return queue.shift();\n } else {\n buffer = first.slice(0, length);\n queue[0] = first.slice(length);\n return buffer;\n }\n }\n\n for (var i = 0, n = queue.length; i < n; i++) {\n if (remain < queue[i].length) break;\n remain -= queue[i].length;\n }\n buffers = queue.splice(0, i);\n\n if (remain > 0 && queue.length > 0) {\n buffers.push(queue[0].slice(0, remain));\n queue[0] = queue[0].slice(remain);\n }\n return Buffer.concat(buffers, length);\n};\n\nStreamReader.prototype.eachByte = function(callback, context) {\n var buffer, n, index;\n\n while (this._queue.length > 0) {\n buffer = this._queue[0];\n n = buffer.length;\n\n while (this._offset < n) {\n index = this._offset;\n this._offset += 1;\n callback.call(context, buffer[index]);\n }\n this._offset = 0;\n this._queue.shift();\n }\n};\n\nmodule.exports = StreamReader;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n crypto = require('crypto'),\n url = require('url'),\n util = require('util'),\n HttpParser = require('../http_parser'),\n Base = require('./base'),\n Hybi = require('./hybi'),\n Proxy = require('./proxy');\n\nvar Client = function(_url, options) {\n this.version = 'hybi-' + Hybi.VERSION;\n Hybi.call(this, null, _url, options);\n\n this.readyState = -1;\n this._key = Client.generateKey();\n this._accept = Hybi.generateAccept(this._key);\n this._http = new HttpParser('response');\n\n var uri = url.parse(this.url),\n auth = uri.auth && Buffer.from(uri.auth, 'utf8').toString('base64');\n\n if (this.VALID_PROTOCOLS.indexOf(uri.protocol) < 0)\n throw new Error(this.url + ' is not a valid WebSocket URL');\n\n this._pathname = (uri.pathname || '/') + (uri.search || '');\n\n this._headers.set('Host', uri.host);\n this._headers.set('Upgrade', 'websocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Key', this._key);\n this._headers.set('Sec-WebSocket-Version', Hybi.VERSION);\n\n if (this._protocols.length > 0)\n this._headers.set('Sec-WebSocket-Protocol', this._protocols.join(', '));\n\n if (auth)\n this._headers.set('Authorization', 'Basic ' + auth);\n};\nutil.inherits(Client, Hybi);\n\nClient.generateKey = function() {\n return crypto.randomBytes(16).toString('base64');\n};\n\nvar instance = {\n VALID_PROTOCOLS: ['ws:', 'wss:'],\n\n proxy: function(origin, options) {\n return new Proxy(this, origin, options);\n },\n\n start: function() {\n if (this.readyState !== -1) return false;\n this._write(this._handshakeRequest());\n this.readyState = 0;\n return true;\n },\n\n parse: function(chunk) {\n if (this.readyState === 3) return;\n if (this.readyState > 0) return Hybi.prototype.parse.call(this, chunk);\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return;\n\n this._validateHandshake();\n if (this.readyState === 3) return;\n\n this._open();\n this.parse(this._http.body);\n },\n\n _handshakeRequest: function() {\n var extensions = this._extensions.generateOffer();\n if (extensions)\n this._headers.set('Sec-WebSocket-Extensions', extensions);\n\n var start = 'GET ' + this._pathname + ' HTTP/1.1',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'utf8');\n },\n\n _failHandshake: function(message) {\n message = 'Error during WebSocket handshake: ' + message;\n this.readyState = 3;\n this.emit('error', new Error(message));\n this.emit('close', new Base.CloseEvent(this.ERRORS.protocol_error, message));\n },\n\n _validateHandshake: function() {\n this.statusCode = this._http.statusCode;\n this.headers = this._http.headers;\n\n if (this._http.error)\n return this._failHandshake(this._http.error.message);\n\n if (this._http.statusCode !== 101)\n return this._failHandshake('Unexpected response code: ' + this._http.statusCode);\n\n var headers = this._http.headers,\n upgrade = headers['upgrade'] || '',\n connection = headers['connection'] || '',\n accept = headers['sec-websocket-accept'] || '',\n protocol = headers['sec-websocket-protocol'] || '';\n\n if (upgrade === '')\n return this._failHandshake(\"'Upgrade' header is missing\");\n if (upgrade.toLowerCase() !== 'websocket')\n return this._failHandshake(\"'Upgrade' header value is not 'WebSocket'\");\n\n if (connection === '')\n return this._failHandshake(\"'Connection' header is missing\");\n if (connection.toLowerCase() !== 'upgrade')\n return this._failHandshake(\"'Connection' header value is not 'Upgrade'\");\n\n if (accept !== this._accept)\n return this._failHandshake('Sec-WebSocket-Accept mismatch');\n\n this.protocol = null;\n\n if (protocol !== '') {\n if (this._protocols.indexOf(protocol) < 0)\n return this._failHandshake('Sec-WebSocket-Protocol mismatch');\n else\n this.protocol = protocol;\n }\n\n try {\n this._extensions.activate(this.headers['sec-websocket-extensions']);\n } catch (e) {\n return this._failHandshake(e.message);\n }\n }\n};\n\nfor (var key in instance)\n Client.prototype[key] = instance[key];\n\nmodule.exports = Client;\n","/*jshint node:true */\n\nvar assert = require('assert');\n\nexports.HTTPParser = HTTPParser;\nfunction HTTPParser(type) {\n assert.ok(type === HTTPParser.REQUEST || type === HTTPParser.RESPONSE || type === undefined);\n if (type === undefined) {\n // Node v12+\n } else {\n this.initialize(type);\n }\n this.maxHeaderSize=HTTPParser.maxHeaderSize\n}\nHTTPParser.prototype.initialize = function (type, async_resource) {\n assert.ok(type === HTTPParser.REQUEST || type === HTTPParser.RESPONSE);\n this.type = type;\n this.state = type + '_LINE';\n this.info = {\n headers: [],\n upgrade: false\n };\n this.trailers = [];\n this.line = '';\n this.isChunked = false;\n this.connection = '';\n this.headerSize = 0; // for preventing too big headers\n this.body_bytes = null;\n this.isUserCall = false;\n this.hadError = false;\n};\n\nHTTPParser.encoding = 'ascii';\nHTTPParser.maxHeaderSize = 80 * 1024; // maxHeaderSize (in bytes) is configurable, but 80kb by default;\nHTTPParser.REQUEST = 'REQUEST';\nHTTPParser.RESPONSE = 'RESPONSE';\n\n// Note: *not* starting with kOnHeaders=0 line the Node parser, because any\n// newly added constants (kOnTimeout in Node v12.19.0) will overwrite 0!\nvar kOnHeaders = HTTPParser.kOnHeaders = 1;\nvar kOnHeadersComplete = HTTPParser.kOnHeadersComplete = 2;\nvar kOnBody = HTTPParser.kOnBody = 3;\nvar kOnMessageComplete = HTTPParser.kOnMessageComplete = 4;\n\n// Some handler stubs, needed for compatibility\nHTTPParser.prototype[kOnHeaders] =\nHTTPParser.prototype[kOnHeadersComplete] =\nHTTPParser.prototype[kOnBody] =\nHTTPParser.prototype[kOnMessageComplete] = function () {};\n\nvar compatMode0_12 = true;\nObject.defineProperty(HTTPParser, 'kOnExecute', {\n get: function () {\n // hack for backward compatibility\n compatMode0_12 = false;\n return 99;\n }\n });\n\nvar methods = exports.methods = HTTPParser.methods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'POST',\n 'PUT',\n 'CONNECT',\n 'OPTIONS',\n 'TRACE',\n 'COPY',\n 'LOCK',\n 'MKCOL',\n 'MOVE',\n 'PROPFIND',\n 'PROPPATCH',\n 'SEARCH',\n 'UNLOCK',\n 'BIND',\n 'REBIND',\n 'UNBIND',\n 'ACL',\n 'REPORT',\n 'MKACTIVITY',\n 'CHECKOUT',\n 'MERGE',\n 'M-SEARCH',\n 'NOTIFY',\n 'SUBSCRIBE',\n 'UNSUBSCRIBE',\n 'PATCH',\n 'PURGE',\n 'MKCALENDAR',\n 'LINK',\n 'UNLINK',\n 'SOURCE',\n];\nvar method_connect = methods.indexOf('CONNECT');\nHTTPParser.prototype.reinitialize = HTTPParser;\nHTTPParser.prototype.close =\nHTTPParser.prototype.pause =\nHTTPParser.prototype.resume =\nHTTPParser.prototype.free = function () {};\nHTTPParser.prototype._compatMode0_11 = false;\nHTTPParser.prototype.getAsyncId = function() { return 0; };\n\nvar headerState = {\n REQUEST_LINE: true,\n RESPONSE_LINE: true,\n HEADER: true\n};\nHTTPParser.prototype.execute = function (chunk, start, length) {\n if (!(this instanceof HTTPParser)) {\n throw new TypeError('not a HTTPParser');\n }\n\n // backward compat to node < 0.11.4\n // Note: the start and length params were removed in newer version\n start = start || 0;\n length = typeof length === 'number' ? length : chunk.length;\n\n this.chunk = chunk;\n this.offset = start;\n var end = this.end = start + length;\n try {\n while (this.offset < end) {\n if (this[this.state]()) {\n break;\n }\n }\n } catch (err) {\n if (this.isUserCall) {\n throw err;\n }\n this.hadError = true;\n return err;\n }\n this.chunk = null;\n length = this.offset - start;\n if (headerState[this.state]) {\n this.headerSize += length;\n if (this.headerSize > (this.maxHeaderSize||HTTPParser.maxHeaderSize)) {\n return new Error('max header size exceeded');\n }\n }\n return length;\n};\n\nvar stateFinishAllowed = {\n REQUEST_LINE: true,\n RESPONSE_LINE: true,\n BODY_RAW: true\n};\nHTTPParser.prototype.finish = function () {\n if (this.hadError) {\n return;\n }\n if (!stateFinishAllowed[this.state]) {\n return new Error('invalid state for EOF');\n }\n if (this.state === 'BODY_RAW') {\n this.userCall()(this[kOnMessageComplete]());\n }\n};\n\n// These three methods are used for an internal speed optimization, and it also\n// works if theses are noops. Basically consume() asks us to read the bytes\n// ourselves, but if we don't do it we get them through execute().\nHTTPParser.prototype.consume =\nHTTPParser.prototype.unconsume =\nHTTPParser.prototype.getCurrentBuffer = function () {};\n\n//For correct error handling - see HTTPParser#execute\n//Usage: this.userCall()(userFunction('arg'));\nHTTPParser.prototype.userCall = function () {\n this.isUserCall = true;\n var self = this;\n return function (ret) {\n self.isUserCall = false;\n return ret;\n };\n};\n\nHTTPParser.prototype.nextRequest = function () {\n this.userCall()(this[kOnMessageComplete]());\n this.reinitialize(this.type);\n};\n\nHTTPParser.prototype.consumeLine = function () {\n var end = this.end,\n chunk = this.chunk;\n for (var i = this.offset; i < end; i++) {\n if (chunk[i] === 0x0a) { // \\n\n var line = this.line + chunk.toString(HTTPParser.encoding, this.offset, i);\n if (line.charAt(line.length - 1) === '\\r') {\n line = line.substr(0, line.length - 1);\n }\n this.line = '';\n this.offset = i + 1;\n return line;\n }\n }\n //line split over multiple chunks\n this.line += chunk.toString(HTTPParser.encoding, this.offset, this.end);\n this.offset = this.end;\n};\n\nvar headerExp = /^([^: \\t]+):[ \\t]*((?:.*[^ \\t])|)/;\nvar headerContinueExp = /^[ \\t]+(.*[^ \\t])/;\nHTTPParser.prototype.parseHeader = function (line, headers) {\n if (line.indexOf('\\r') !== -1) {\n throw parseErrorCode('HPE_LF_EXPECTED');\n }\n\n var match = headerExp.exec(line);\n var k = match && match[1];\n if (k) { // skip empty string (malformed header)\n headers.push(k);\n headers.push(match[2]);\n } else {\n var matchContinue = headerContinueExp.exec(line);\n if (matchContinue && headers.length) {\n if (headers[headers.length - 1]) {\n headers[headers.length - 1] += ' ';\n }\n headers[headers.length - 1] += matchContinue[1];\n }\n }\n};\n\nvar requestExp = /^([A-Z-]+) ([^ ]+) HTTP\\/(\\d)\\.(\\d)$/;\nHTTPParser.prototype.REQUEST_LINE = function () {\n var line = this.consumeLine();\n if (!line) {\n return;\n }\n var match = requestExp.exec(line);\n if (match === null) {\n throw parseErrorCode('HPE_INVALID_CONSTANT');\n }\n this.info.method = this._compatMode0_11 ? match[1] : methods.indexOf(match[1]);\n if (this.info.method === -1) {\n throw new Error('invalid request method');\n }\n this.info.url = match[2];\n this.info.versionMajor = +match[3];\n this.info.versionMinor = +match[4];\n this.body_bytes = 0;\n this.state = 'HEADER';\n};\n\nvar responseExp = /^HTTP\\/(\\d)\\.(\\d) (\\d{3}) ?(.*)$/;\nHTTPParser.prototype.RESPONSE_LINE = function () {\n var line = this.consumeLine();\n if (!line) {\n return;\n }\n var match = responseExp.exec(line);\n if (match === null) {\n throw parseErrorCode('HPE_INVALID_CONSTANT');\n }\n this.info.versionMajor = +match[1];\n this.info.versionMinor = +match[2];\n var statusCode = this.info.statusCode = +match[3];\n this.info.statusMessage = match[4];\n // Implied zero length.\n if ((statusCode / 100 | 0) === 1 || statusCode === 204 || statusCode === 304) {\n this.body_bytes = 0;\n }\n this.state = 'HEADER';\n};\n\nHTTPParser.prototype.shouldKeepAlive = function () {\n if (this.info.versionMajor > 0 && this.info.versionMinor > 0) {\n if (this.connection.indexOf('close') !== -1) {\n return false;\n }\n } else if (this.connection.indexOf('keep-alive') === -1) {\n return false;\n }\n if (this.body_bytes !== null || this.isChunked) { // || skipBody\n return true;\n }\n return false;\n};\n\nHTTPParser.prototype.HEADER = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n var info = this.info;\n if (line) {\n this.parseHeader(line, info.headers);\n } else {\n var headers = info.headers;\n var hasContentLength = false;\n var currentContentLengthValue;\n var hasUpgradeHeader = false;\n for (var i = 0; i < headers.length; i += 2) {\n switch (headers[i].toLowerCase()) {\n case 'transfer-encoding':\n this.isChunked = headers[i + 1].toLowerCase() === 'chunked';\n break;\n case 'content-length':\n currentContentLengthValue = +headers[i + 1];\n if (hasContentLength) {\n // Fix duplicate Content-Length header with same values.\n // Throw error only if values are different.\n // Known issues:\n // https://github.com/request/request/issues/2091#issuecomment-328715113\n // https://github.com/nodejs/node/issues/6517#issuecomment-216263771\n if (currentContentLengthValue !== this.body_bytes) {\n throw parseErrorCode('HPE_UNEXPECTED_CONTENT_LENGTH');\n }\n } else {\n hasContentLength = true;\n this.body_bytes = currentContentLengthValue;\n }\n break;\n case 'connection':\n this.connection += headers[i + 1].toLowerCase();\n break;\n case 'upgrade':\n hasUpgradeHeader = true;\n break;\n }\n }\n\n // if both isChunked and hasContentLength, isChunked wins\n // This is required so the body is parsed using the chunked method, and matches\n // Chrome's behavior. We could, maybe, ignore them both (would get chunked\n // encoding into the body), and/or disable shouldKeepAlive to be more\n // resilient.\n if (this.isChunked && hasContentLength) {\n hasContentLength = false;\n this.body_bytes = null;\n }\n\n // Logic from https://github.com/nodejs/http-parser/blob/921d5585515a153fa00e411cf144280c59b41f90/http_parser.c#L1727-L1737\n // \"For responses, \"Upgrade: foo\" and \"Connection: upgrade\" are\n // mandatory only when it is a 101 Switching Protocols response,\n // otherwise it is purely informational, to announce support.\n if (hasUpgradeHeader && this.connection.indexOf('upgrade') != -1) {\n info.upgrade = this.type === HTTPParser.REQUEST || info.statusCode === 101;\n } else {\n info.upgrade = info.method === method_connect;\n }\n\n if (this.isChunked && info.upgrade) {\n this.isChunked = false;\n }\n\n info.shouldKeepAlive = this.shouldKeepAlive();\n //problem which also exists in original node: we should know skipBody before calling onHeadersComplete\n var skipBody;\n if (compatMode0_12) {\n skipBody = this.userCall()(this[kOnHeadersComplete](info));\n } else {\n skipBody = this.userCall()(this[kOnHeadersComplete](info.versionMajor,\n info.versionMinor, info.headers, info.method, info.url, info.statusCode,\n info.statusMessage, info.upgrade, info.shouldKeepAlive));\n }\n if (skipBody === 2) {\n this.nextRequest();\n return true;\n } else if (this.isChunked && !skipBody) {\n this.state = 'BODY_CHUNKHEAD';\n } else if (skipBody || this.body_bytes === 0) {\n this.nextRequest();\n // For older versions of node (v6.x and older?), that return skipBody=1 or skipBody=true,\n // need this \"return true;\" if it's an upgrade request.\n return info.upgrade;\n } else if (this.body_bytes === null) {\n this.state = 'BODY_RAW';\n } else {\n this.state = 'BODY_SIZED';\n }\n }\n};\n\nHTTPParser.prototype.BODY_CHUNKHEAD = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n this.body_bytes = parseInt(line, 16);\n if (!this.body_bytes) {\n this.state = 'BODY_CHUNKTRAILERS';\n } else {\n this.state = 'BODY_CHUNK';\n }\n};\n\nHTTPParser.prototype.BODY_CHUNK = function () {\n var length = Math.min(this.end - this.offset, this.body_bytes);\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset += length;\n this.body_bytes -= length;\n if (!this.body_bytes) {\n this.state = 'BODY_CHUNKEMPTYLINE';\n }\n};\n\nHTTPParser.prototype.BODY_CHUNKEMPTYLINE = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n assert.equal(line, '');\n this.state = 'BODY_CHUNKHEAD';\n};\n\nHTTPParser.prototype.BODY_CHUNKTRAILERS = function () {\n var line = this.consumeLine();\n if (line === undefined) {\n return;\n }\n if (line) {\n this.parseHeader(line, this.trailers);\n } else {\n if (this.trailers.length) {\n this.userCall()(this[kOnHeaders](this.trailers, ''));\n }\n this.nextRequest();\n }\n};\n\nHTTPParser.prototype.BODY_RAW = function () {\n var length = this.end - this.offset;\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset = this.end;\n};\n\nHTTPParser.prototype.BODY_SIZED = function () {\n var length = Math.min(this.end - this.offset, this.body_bytes);\n this.userCall()(this[kOnBody](this.chunk, this.offset, length));\n this.offset += length;\n this.body_bytes -= length;\n if (!this.body_bytes) {\n this.nextRequest();\n }\n};\n\n// backward compat to node < 0.11.6\n['Headers', 'HeadersComplete', 'Body', 'MessageComplete'].forEach(function (name) {\n var k = HTTPParser['kOn' + name];\n Object.defineProperty(HTTPParser.prototype, 'on' + name, {\n get: function () {\n return this[k];\n },\n set: function (to) {\n // hack for backward compatibility\n this._compatMode0_11 = true;\n method_connect = 'CONNECT';\n return (this[k] = to);\n }\n });\n});\n\nfunction parseErrorCode(code) {\n var err = new Error('Parse Error');\n err.code = code;\n return err;\n}\n","module.exports = require(\"assert\");","'use strict';\n\nvar Parser = require('./parser'),\n Pipeline = require('./pipeline');\n\nvar Extensions = function() {\n this._rsv1 = this._rsv2 = this._rsv3 = null;\n\n this._byName = {};\n this._inOrder = [];\n this._sessions = [];\n this._index = {};\n};\n\nExtensions.MESSAGE_OPCODES = [1, 2];\n\nvar instance = {\n add: function(ext) {\n if (typeof ext.name !== 'string') throw new TypeError('extension.name must be a string');\n if (ext.type !== 'permessage') throw new TypeError('extension.type must be \"permessage\"');\n\n if (typeof ext.rsv1 !== 'boolean') throw new TypeError('extension.rsv1 must be true or false');\n if (typeof ext.rsv2 !== 'boolean') throw new TypeError('extension.rsv2 must be true or false');\n if (typeof ext.rsv3 !== 'boolean') throw new TypeError('extension.rsv3 must be true or false');\n\n if (this._byName.hasOwnProperty(ext.name))\n throw new TypeError('An extension with name \"' + ext.name + '\" is already registered');\n\n this._byName[ext.name] = ext;\n this._inOrder.push(ext);\n },\n\n generateOffer: function() {\n var sessions = [],\n offer = [],\n index = {};\n\n this._inOrder.forEach(function(ext) {\n var session = ext.createClientSession();\n if (!session) return;\n\n var record = [ext, session];\n sessions.push(record);\n index[ext.name] = record;\n\n var offers = session.generateOffer();\n offers = offers ? [].concat(offers) : [];\n\n offers.forEach(function(off) {\n offer.push(Parser.serializeParams(ext.name, off));\n }, this);\n }, this);\n\n this._sessions = sessions;\n this._index = index;\n\n return offer.length > 0 ? offer.join(', ') : null;\n },\n\n activate: function(header) {\n var responses = Parser.parseHeader(header),\n sessions = [];\n\n responses.eachOffer(function(name, params) {\n var record = this._index[name];\n\n if (!record)\n throw new Error('Server sent an extension response for unknown extension \"' + name + '\"');\n\n var ext = record[0],\n session = record[1],\n reserved = this._reserved(ext);\n\n if (reserved)\n throw new Error('Server sent two extension responses that use the RSV' +\n reserved[0] + ' bit: \"' +\n reserved[1] + '\" and \"' + ext.name + '\"');\n\n if (session.activate(params) !== true)\n throw new Error('Server sent unacceptable extension parameters: ' +\n Parser.serializeParams(name, params));\n\n this._reserve(ext);\n sessions.push(record);\n }, this);\n\n this._sessions = sessions;\n this._pipeline = new Pipeline(sessions);\n },\n\n generateResponse: function(header) {\n var sessions = [],\n response = [],\n offers = Parser.parseHeader(header);\n\n this._inOrder.forEach(function(ext) {\n var offer = offers.byName(ext.name);\n if (offer.length === 0 || this._reserved(ext)) return;\n\n var session = ext.createServerSession(offer);\n if (!session) return;\n\n this._reserve(ext);\n sessions.push([ext, session]);\n response.push(Parser.serializeParams(ext.name, session.generateResponse()));\n }, this);\n\n this._sessions = sessions;\n this._pipeline = new Pipeline(sessions);\n\n return response.length > 0 ? response.join(', ') : null;\n },\n\n validFrameRsv: function(frame) {\n var allowed = { rsv1: false, rsv2: false, rsv3: false },\n ext;\n\n if (Extensions.MESSAGE_OPCODES.indexOf(frame.opcode) >= 0) {\n for (var i = 0, n = this._sessions.length; i < n; i++) {\n ext = this._sessions[i][0];\n allowed.rsv1 = allowed.rsv1 || ext.rsv1;\n allowed.rsv2 = allowed.rsv2 || ext.rsv2;\n allowed.rsv3 = allowed.rsv3 || ext.rsv3;\n }\n }\n\n return (allowed.rsv1 || !frame.rsv1) &&\n (allowed.rsv2 || !frame.rsv2) &&\n (allowed.rsv3 || !frame.rsv3);\n },\n\n processIncomingMessage: function(message, callback, context) {\n this._pipeline.processIncomingMessage(message, callback, context);\n },\n\n processOutgoingMessage: function(message, callback, context) {\n this._pipeline.processOutgoingMessage(message, callback, context);\n },\n\n close: function(callback, context) {\n if (!this._pipeline) return callback.call(context);\n this._pipeline.close(callback, context);\n },\n\n _reserve: function(ext) {\n this._rsv1 = this._rsv1 || (ext.rsv1 && ext.name);\n this._rsv2 = this._rsv2 || (ext.rsv2 && ext.name);\n this._rsv3 = this._rsv3 || (ext.rsv3 && ext.name);\n },\n\n _reserved: function(ext) {\n if (this._rsv1 && ext.rsv1) return [1, this._rsv1];\n if (this._rsv2 && ext.rsv2) return [2, this._rsv2];\n if (this._rsv3 && ext.rsv3) return [3, this._rsv3];\n return false;\n }\n};\n\nfor (var key in instance)\n Extensions.prototype[key] = instance[key];\n\nmodule.exports = Extensions;\n","'use strict';\n\nvar TOKEN = /([!#\\$%&'\\*\\+\\-\\.\\^_`\\|~0-9A-Za-z]+)/,\n NOTOKEN = /([^!#\\$%&'\\*\\+\\-\\.\\^_`\\|~0-9A-Za-z])/g,\n QUOTED = /\"((?:\\\\[\\x00-\\x7f]|[^\\x00-\\x08\\x0a-\\x1f\\x7f\"\\\\])*)\"/,\n PARAM = new RegExp(TOKEN.source + '(?:=(?:' + TOKEN.source + '|' + QUOTED.source + '))?'),\n EXT = new RegExp(TOKEN.source + '(?: *; *' + PARAM.source + ')*', 'g'),\n EXT_LIST = new RegExp('^' + EXT.source + '(?: *, *' + EXT.source + ')*$'),\n NUMBER = /^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$/;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar Parser = {\n parseHeader: function(header) {\n var offers = new Offers();\n if (header === '' || header === undefined) return offers;\n\n if (!EXT_LIST.test(header))\n throw new SyntaxError('Invalid Sec-WebSocket-Extensions header: ' + header);\n\n var values = header.match(EXT);\n\n values.forEach(function(value) {\n var params = value.match(new RegExp(PARAM.source, 'g')),\n name = params.shift(),\n offer = {};\n\n params.forEach(function(param) {\n var args = param.match(PARAM), key = args[1], data;\n\n if (args[2] !== undefined) {\n data = args[2];\n } else if (args[3] !== undefined) {\n data = args[3].replace(/\\\\/g, '');\n } else {\n data = true;\n }\n if (NUMBER.test(data)) data = parseFloat(data);\n\n if (hasOwnProperty.call(offer, key)) {\n offer[key] = [].concat(offer[key]);\n offer[key].push(data);\n } else {\n offer[key] = data;\n }\n }, this);\n offers.push(name, offer);\n }, this);\n\n return offers;\n },\n\n serializeParams: function(name, params) {\n var values = [];\n\n var print = function(key, value) {\n if (value instanceof Array) {\n value.forEach(function(v) { print(key, v) });\n } else if (value === true) {\n values.push(key);\n } else if (typeof value === 'number') {\n values.push(key + '=' + value);\n } else if (NOTOKEN.test(value)) {\n values.push(key + '=\"' + value.replace(/\"/g, '\\\\\"') + '\"');\n } else {\n values.push(key + '=' + value);\n }\n };\n\n for (var key in params) print(key, params[key]);\n\n return [name].concat(values).join('; ');\n }\n};\n\nvar Offers = function() {\n this._byName = {};\n this._inOrder = [];\n};\n\nOffers.prototype.push = function(name, params) {\n if (!hasOwnProperty.call(this._byName, name))\n this._byName[name] = [];\n\n this._byName[name].push(params);\n this._inOrder.push({ name: name, params: params });\n};\n\nOffers.prototype.eachOffer = function(callback, context) {\n var list = this._inOrder;\n for (var i = 0, n = list.length; i < n; i++)\n callback.call(context, list[i].name, list[i].params);\n};\n\nOffers.prototype.byName = function(name) {\n return this._byName[name] || [];\n};\n\nOffers.prototype.toArray = function() {\n return this._inOrder.slice();\n};\n\nmodule.exports = Parser;\n","'use strict';\n\nvar Cell = require('./cell'),\n Pledge = require('./pledge');\n\nvar Pipeline = function(sessions) {\n this._cells = sessions.map(function(session) { return new Cell(session) });\n this._stopped = { incoming: false, outgoing: false };\n};\n\nPipeline.prototype.processIncomingMessage = function(message, callback, context) {\n if (this._stopped.incoming) return;\n this._loop('incoming', this._cells.length - 1, -1, -1, message, callback, context);\n};\n\nPipeline.prototype.processOutgoingMessage = function(message, callback, context) {\n if (this._stopped.outgoing) return;\n this._loop('outgoing', 0, this._cells.length, 1, message, callback, context);\n};\n\nPipeline.prototype.close = function(callback, context) {\n this._stopped = { incoming: true, outgoing: true };\n\n var closed = this._cells.map(function(a) { return a.close() });\n if (callback)\n Pledge.all(closed).then(function() { callback.call(context) });\n};\n\nPipeline.prototype._loop = function(direction, start, end, step, message, callback, context) {\n var cells = this._cells,\n n = cells.length,\n self = this;\n\n while (n--) cells[n].pending(direction);\n\n var pipe = function(index, error, msg) {\n if (index === end) return callback.call(context, error, msg);\n\n cells[index][direction](error, msg, function(err, m) {\n if (err) self._stopped[direction] = true;\n pipe(index + step, err, m);\n });\n };\n pipe(start, null, message);\n};\n\nmodule.exports = Pipeline;\n","'use strict';\n\nvar Functor = require('./functor'),\n Pledge = require('./pledge');\n\nvar Cell = function(tuple) {\n this._ext = tuple[0];\n this._session = tuple[1];\n\n this._functors = {\n incoming: new Functor(this._session, 'processIncomingMessage'),\n outgoing: new Functor(this._session, 'processOutgoingMessage')\n };\n};\n\nCell.prototype.pending = function(direction) {\n var functor = this._functors[direction];\n if (!functor._stopped) functor.pending += 1;\n};\n\nCell.prototype.incoming = function(error, message, callback, context) {\n this._exec('incoming', error, message, callback, context);\n};\n\nCell.prototype.outgoing = function(error, message, callback, context) {\n this._exec('outgoing', error, message, callback, context);\n};\n\nCell.prototype.close = function() {\n this._closed = this._closed || new Pledge();\n this._doClose();\n return this._closed;\n};\n\nCell.prototype._exec = function(direction, error, message, callback, context) {\n this._functors[direction].call(error, message, function(err, msg) {\n if (err) err.message = this._ext.name + ': ' + err.message;\n callback.call(context, err, msg);\n this._doClose();\n }, this);\n};\n\nCell.prototype._doClose = function() {\n var fin = this._functors.incoming,\n fout = this._functors.outgoing;\n\n if (!this._closed || fin.pending + fout.pending !== 0) return;\n if (this._session) this._session.close();\n this._session = null;\n this._closed.done();\n};\n\nmodule.exports = Cell;\n","'use strict';\n\nvar RingBuffer = require('./ring_buffer');\n\nvar Functor = function(session, method) {\n this._session = session;\n this._method = method;\n this._queue = new RingBuffer(Functor.QUEUE_SIZE);\n this._stopped = false;\n this.pending = 0;\n};\n\nFunctor.QUEUE_SIZE = 8;\n\nFunctor.prototype.call = function(error, message, callback, context) {\n if (this._stopped) return;\n\n var record = { error: error, message: message, callback: callback, context: context, done: false },\n called = false,\n self = this;\n\n this._queue.push(record);\n\n if (record.error) {\n record.done = true;\n this._stop();\n return this._flushQueue();\n }\n\n var handler = function(err, msg) {\n if (!(called ^ (called = true))) return;\n\n if (err) {\n self._stop();\n record.error = err;\n record.message = null;\n } else {\n record.message = msg;\n }\n\n record.done = true;\n self._flushQueue();\n };\n\n try {\n this._session[this._method](message, handler);\n } catch (err) {\n handler(err);\n }\n};\n\nFunctor.prototype._stop = function() {\n this.pending = this._queue.length;\n this._stopped = true;\n};\n\nFunctor.prototype._flushQueue = function() {\n var queue = this._queue, record;\n\n while (queue.length > 0 && queue.peek().done) {\n record = queue.shift();\n if (record.error) {\n this.pending = 0;\n queue.clear();\n } else {\n this.pending -= 1;\n }\n record.callback.call(record.context, record.error, record.message);\n }\n};\n\nmodule.exports = Functor;\n","'use strict';\n\nvar Frame = function() {};\n\nvar instance = {\n final: false,\n rsv1: false,\n rsv2: false,\n rsv3: false,\n opcode: null,\n masked: false,\n maskingKey: null,\n lengthBytes: 1,\n length: 0,\n payload: null\n};\n\nfor (var key in instance)\n Frame.prototype[key] = instance[key];\n\nmodule.exports = Frame;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Message = function() {\n this.rsv1 = false;\n this.rsv2 = false;\n this.rsv3 = false;\n this.opcode = null;\n this.length = 0;\n this._chunks = [];\n};\n\nvar instance = {\n read: function() {\n return this.data = this.data || Buffer.concat(this._chunks, this.length);\n },\n\n pushFrame: function(frame) {\n this.rsv1 = this.rsv1 || frame.rsv1;\n this.rsv2 = this.rsv2 || frame.rsv2;\n this.rsv3 = this.rsv3 || frame.rsv3;\n\n if (this.opcode === null) this.opcode = frame.opcode;\n\n this._chunks.push(frame.payload);\n this.length += frame.length;\n }\n};\n\nfor (var key in instance)\n Message.prototype[key] = instance[key];\n\nmodule.exports = Message;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Stream = require('stream').Stream,\n url = require('url'),\n util = require('util'),\n Base = require('./base'),\n Headers = require('./headers'),\n HttpParser = require('../http_parser');\n\nvar PORTS = { 'ws:': 80, 'wss:': 443 };\n\nvar Proxy = function(client, origin, options) {\n this._client = client;\n this._http = new HttpParser('response');\n this._origin = (typeof client.url === 'object') ? client.url : url.parse(client.url);\n this._url = (typeof origin === 'object') ? origin : url.parse(origin);\n this._options = options || {};\n this._state = 0;\n\n this.readable = this.writable = true;\n this._paused = false;\n\n this._headers = new Headers();\n this._headers.set('Host', this._origin.host);\n this._headers.set('Connection', 'keep-alive');\n this._headers.set('Proxy-Connection', 'keep-alive');\n\n var auth = this._url.auth && Buffer.from(this._url.auth, 'utf8').toString('base64');\n if (auth) this._headers.set('Proxy-Authorization', 'Basic ' + auth);\n};\nutil.inherits(Proxy, Stream);\n\nvar instance = {\n setHeader: function(name, value) {\n if (this._state !== 0) return false;\n this._headers.set(name, value);\n return true;\n },\n\n start: function() {\n if (this._state !== 0) return false;\n this._state = 1;\n\n var origin = this._origin,\n port = origin.port || PORTS[origin.protocol],\n start = 'CONNECT ' + origin.hostname + ':' + port + ' HTTP/1.1';\n\n var headers = [start, this._headers.toString(), ''];\n\n this.emit('data', Buffer.from(headers.join('\\r\\n'), 'utf8'));\n return true;\n },\n\n pause: function() {\n this._paused = true;\n },\n\n resume: function() {\n this._paused = false;\n this.emit('drain');\n },\n\n write: function(chunk) {\n if (!this.writable) return false;\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return !this._paused;\n\n this.statusCode = this._http.statusCode;\n this.headers = this._http.headers;\n\n if (this.statusCode === 200) {\n this.emit('connect', new Base.ConnectEvent());\n } else {\n var message = \"Can't establish a connection to the server at \" + this._origin.href;\n this.emit('error', new Error(message));\n }\n this.end();\n return !this._paused;\n },\n\n end: function(chunk) {\n if (!this.writable) return;\n if (chunk !== undefined) this.write(chunk);\n this.readable = this.writable = false;\n this.emit('close');\n this.emit('end');\n },\n\n destroy: function() {\n this.end();\n }\n};\n\nfor (var key in instance)\n Proxy.prototype[key] = instance[key];\n\nmodule.exports = Proxy;\n","'use strict';\n\nvar util = require('util'),\n HttpParser = require('../http_parser'),\n Base = require('./base'),\n Draft75 = require('./draft75'),\n Draft76 = require('./draft76'),\n Hybi = require('./hybi');\n\nvar Server = function(options) {\n Base.call(this, null, null, options);\n this._http = new HttpParser('request');\n};\nutil.inherits(Server, Base);\n\nvar instance = {\n EVENTS: ['open', 'message', 'error', 'close', 'ping', 'pong'],\n\n _bindEventListeners: function() {\n this.messages.on('error', function() {});\n this.on('error', function() {});\n },\n\n parse: function(chunk) {\n if (this._delegate) return this._delegate.parse(chunk);\n\n this._http.parse(chunk);\n if (!this._http.isComplete()) return;\n\n this.method = this._http.method;\n this.url = this._http.url;\n this.headers = this._http.headers;\n this.body = this._http.body;\n\n var self = this;\n this._delegate = Server.http(this, this._options);\n this._delegate.messages = this.messages;\n this._delegate.io = this.io;\n this._open();\n\n this.EVENTS.forEach(function(event) {\n this._delegate.on(event, function(e) { self.emit(event, e) });\n }, this);\n\n this.protocol = this._delegate.protocol;\n this.version = this._delegate.version;\n\n this.parse(this._http.body);\n this.emit('connect', new Base.ConnectEvent());\n },\n\n _open: function() {\n this.__queue.forEach(function(msg) {\n this._delegate[msg[0]].apply(this._delegate, msg[1]);\n }, this);\n this.__queue = [];\n }\n};\n\n['addExtension', 'setHeader', 'start', 'frame', 'text', 'binary', 'ping', 'close'].forEach(function(method) {\n instance[method] = function() {\n if (this._delegate) {\n return this._delegate[method].apply(this._delegate, arguments);\n } else {\n this.__queue.push([method, arguments]);\n return true;\n }\n };\n});\n\nfor (var key in instance)\n Server.prototype[key] = instance[key];\n\nServer.isSecureRequest = function(request) {\n if (request.connection && request.connection.authorized !== undefined) return true;\n if (request.socket && request.socket.secure) return true;\n\n var headers = request.headers;\n if (!headers) return false;\n if (headers['https'] === 'on') return true;\n if (headers['x-forwarded-ssl'] === 'on') return true;\n if (headers['x-forwarded-scheme'] === 'https') return true;\n if (headers['x-forwarded-proto'] === 'https') return true;\n\n return false;\n};\n\nServer.determineUrl = function(request) {\n var scheme = this.isSecureRequest(request) ? 'wss:' : 'ws:';\n return scheme + '//' + request.headers.host + request.url;\n};\n\nServer.http = function(request, options) {\n options = options || {};\n if (options.requireMasking === undefined) options.requireMasking = true;\n\n var headers = request.headers,\n version = headers['sec-websocket-version'],\n key = headers['sec-websocket-key'],\n key1 = headers['sec-websocket-key1'],\n key2 = headers['sec-websocket-key2'],\n url = this.determineUrl(request);\n\n if (version || key)\n return new Hybi(request, url, options);\n else if (key1 || key2)\n return new Draft76(request, url, options);\n else\n return new Draft75(request, url, options);\n};\n\nmodule.exports = Server;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer,\n Base = require('./base'),\n Draft75 = require('./draft75'),\n crypto = require('crypto'),\n util = require('util');\n\n\nvar numberFromKey = function(key) {\n return parseInt((key.match(/[0-9]/g) || []).join(''), 10);\n};\n\nvar spacesInKey = function(key) {\n return (key.match(/ /g) || []).length;\n};\n\n\nvar Draft76 = function(request, url, options) {\n Draft75.apply(this, arguments);\n this._stage = -1;\n this._body = [];\n this.version = 'hixie-76';\n\n this._headers.clear();\n\n this._headers.set('Upgrade', 'WebSocket');\n this._headers.set('Connection', 'Upgrade');\n this._headers.set('Sec-WebSocket-Origin', this._request.headers.origin);\n this._headers.set('Sec-WebSocket-Location', this.url);\n};\nutil.inherits(Draft76, Draft75);\n\nvar instance = {\n BODY_SIZE: 8,\n\n start: function() {\n if (!Draft75.prototype.start.call(this)) return false;\n this._started = true;\n this._sendHandshakeBody();\n return true;\n },\n\n close: function() {\n if (this.readyState === 3) return false;\n if (this.readyState === 1) this._write(Buffer.from([0xFF, 0x00]));\n this.readyState = 3;\n this.emit('close', new Base.CloseEvent(null, null));\n return true;\n },\n\n _handshakeResponse: function() {\n var headers = this._request.headers,\n key1 = headers['sec-websocket-key1'],\n key2 = headers['sec-websocket-key2'];\n\n if (!key1) throw new Error('Missing required header: Sec-WebSocket-Key1');\n if (!key2) throw new Error('Missing required header: Sec-WebSocket-Key2');\n\n var number1 = numberFromKey(key1),\n spaces1 = spacesInKey(key1),\n\n number2 = numberFromKey(key2),\n spaces2 = spacesInKey(key2);\n\n if (number1 % spaces1 !== 0 || number2 % spaces2 !== 0)\n throw new Error('Client sent invalid Sec-WebSocket-Key headers');\n\n this._keyValues = [number1 / spaces1, number2 / spaces2];\n\n var start = 'HTTP/1.1 101 WebSocket Protocol Handshake',\n headers = [start, this._headers.toString(), ''];\n\n return Buffer.from(headers.join('\\r\\n'), 'binary');\n },\n\n _handshakeSignature: function() {\n if (this._body.length < this.BODY_SIZE) return null;\n\n var md5 = crypto.createHash('md5'),\n buffer = Buffer.allocUnsafe(8 + this.BODY_SIZE);\n\n buffer.writeUInt32BE(this._keyValues[0], 0);\n buffer.writeUInt32BE(this._keyValues[1], 4);\n Buffer.from(this._body).copy(buffer, 8, 0, this.BODY_SIZE);\n\n md5.update(buffer);\n return Buffer.from(md5.digest('binary'), 'binary');\n },\n\n _sendHandshakeBody: function() {\n if (!this._started) return;\n var signature = this._handshakeSignature();\n if (!signature) return;\n\n this._write(signature);\n this._stage = 0;\n this._open();\n\n if (this._body.length > this.BODY_SIZE)\n this.parse(this._body.slice(this.BODY_SIZE));\n },\n\n _parseLeadingByte: function(octet) {\n if (octet !== 0xFF)\n return Draft75.prototype._parseLeadingByte.call(this, octet);\n\n this._closing = true;\n this._length = 0;\n this._stage = 1;\n }\n};\n\nfor (var key in instance)\n Draft76.prototype[key] = instance[key];\n\nmodule.exports = Draft76;\n","'use strict';\n\nvar util = require('util'),\n net = require('net'),\n tls = require('tls'),\n url = require('url'),\n driver = require('websocket-driver'),\n API = require('./api'),\n Event = require('./api/event');\n\nvar DEFAULT_PORTS = {'http:': 80, 'https:': 443, 'ws:':80, 'wss:': 443},\n SECURE_PROTOCOLS = ['https:', 'wss:'];\n\nvar Client = function(_url, protocols, options) {\n options = options || {};\n\n this.url = _url;\n this._driver = driver.client(this.url, {maxLength: options.maxLength, protocols: protocols});\n\n ['open', 'error'].forEach(function(event) {\n this._driver.on(event, function() {\n self.headers = self._driver.headers;\n self.statusCode = self._driver.statusCode;\n });\n }, this);\n\n var proxy = options.proxy || {},\n endpoint = url.parse(proxy.origin || this.url),\n port = endpoint.port || DEFAULT_PORTS[endpoint.protocol],\n secure = SECURE_PROTOCOLS.indexOf(endpoint.protocol) >= 0,\n onConnect = function() { self._onConnect() },\n netOptions = options.net || {},\n originTLS = options.tls || {},\n socketTLS = proxy.origin ? (proxy.tls || {}) : originTLS,\n self = this;\n\n netOptions.host = socketTLS.host = endpoint.hostname;\n netOptions.port = socketTLS.port = port;\n\n originTLS.ca = originTLS.ca || options.ca;\n socketTLS.servername = socketTLS.servername || endpoint.hostname;\n\n this._stream = secure\n ? tls.connect(socketTLS, onConnect)\n : net.connect(netOptions, onConnect);\n\n if (proxy.origin) this._configureProxy(proxy, originTLS);\n\n API.call(this, options);\n};\nutil.inherits(Client, API);\n\nClient.prototype._onConnect = function() {\n var worker = this._proxy || this._driver;\n worker.start();\n};\n\nClient.prototype._configureProxy = function(proxy, originTLS) {\n var uri = url.parse(this.url),\n secure = SECURE_PROTOCOLS.indexOf(uri.protocol) >= 0,\n self = this,\n name;\n\n this._proxy = this._driver.proxy(proxy.origin);\n\n if (proxy.headers) {\n for (name in proxy.headers) this._proxy.setHeader(name, proxy.headers[name]);\n }\n\n this._proxy.pipe(this._stream, {end: false});\n this._stream.pipe(this._proxy);\n\n this._proxy.on('connect', function() {\n if (secure) {\n var options = {socket: self._stream, servername: uri.hostname};\n for (name in originTLS) options[name] = originTLS[name];\n self._stream = tls.connect(options);\n self._configureStream();\n }\n self._driver.io.pipe(self._stream);\n self._stream.pipe(self._driver.io);\n self._driver.start();\n });\n\n this._proxy.on('error', function(error) {\n self._driver.emit('error', error);\n });\n};\n\nmodule.exports = Client;\n","module.exports = require(\"net\");","module.exports = require(\"tls\");","'use strict';\n\nvar Stream = require('stream').Stream,\n util = require('util'),\n driver = require('websocket-driver'),\n Headers = require('websocket-driver/lib/websocket/driver/headers'),\n API = require('./websocket/api'),\n EventTarget = require('./websocket/api/event_target'),\n Event = require('./websocket/api/event');\n\nvar EventSource = function(request, response, options) {\n this.writable = true;\n options = options || {};\n\n this._stream = response.socket;\n this._ping = options.ping || this.DEFAULT_PING;\n this._retry = options.retry || this.DEFAULT_RETRY;\n\n var scheme = driver.isSecureRequest(request) ? 'https:' : 'http:';\n this.url = scheme + '//' + request.headers.host + request.url;\n this.lastEventId = request.headers['last-event-id'] || '';\n this.readyState = API.CONNECTING;\n\n var headers = new Headers(),\n self = this;\n\n if (options.headers) {\n for (var key in options.headers) headers.set(key, options.headers[key]);\n }\n\n if (!this._stream || !this._stream.writable) return;\n process.nextTick(function() { self._open() });\n\n this._stream.setTimeout(0);\n this._stream.setNoDelay(true);\n\n var handshake = 'HTTP/1.1 200 OK\\r\\n' +\n 'Content-Type: text/event-stream\\r\\n' +\n 'Cache-Control: no-cache, no-store\\r\\n' +\n 'Connection: close\\r\\n' +\n headers.toString() +\n '\\r\\n' +\n 'retry: ' + Math.floor(this._retry * 1000) + '\\r\\n\\r\\n';\n\n this._write(handshake);\n\n this._stream.on('drain', function() { self.emit('drain') });\n\n if (this._ping)\n this._pingTimer = setInterval(function() { self.ping() }, this._ping * 1000);\n\n ['error', 'end'].forEach(function(event) {\n self._stream.on(event, function() { self.close() });\n });\n};\nutil.inherits(EventSource, Stream);\n\nEventSource.isEventSource = function(request) {\n if (request.method !== 'GET') return false;\n var accept = (request.headers.accept || '').split(/\\s*,\\s*/);\n return accept.indexOf('text/event-stream') >= 0;\n};\n\nvar instance = {\n DEFAULT_PING: 10,\n DEFAULT_RETRY: 5,\n\n _write: function(chunk) {\n if (!this.writable) return false;\n try {\n return this._stream.write(chunk, 'utf8');\n } catch (e) {\n return false;\n }\n },\n\n _open: function() {\n if (this.readyState !== API.CONNECTING) return;\n\n this.readyState = API.OPEN;\n\n var event = new Event('open');\n event.initEvent('open', false, false);\n this.dispatchEvent(event);\n },\n\n write: function(message) {\n return this.send(message);\n },\n\n end: function(message) {\n if (message !== undefined) this.write(message);\n this.close();\n },\n\n send: function(message, options) {\n if (this.readyState > API.OPEN) return false;\n\n message = String(message).replace(/(\\r\\n|\\r|\\n)/g, '$1data: ');\n options = options || {};\n\n var frame = '';\n if (options.event) frame += 'event: ' + options.event + '\\r\\n';\n if (options.id) frame += 'id: ' + options.id + '\\r\\n';\n frame += 'data: ' + message + '\\r\\n\\r\\n';\n\n return this._write(frame);\n },\n\n ping: function() {\n return this._write(':\\r\\n\\r\\n');\n },\n\n close: function() {\n if (this.readyState > API.OPEN) return false;\n\n this.readyState = API.CLOSED;\n this.writable = false;\n if (this._pingTimer) clearInterval(this._pingTimer);\n if (this._stream) this._stream.end();\n\n var event = new Event('close');\n event.initEvent('close', false, false);\n this.dispatchEvent(event);\n\n return true;\n }\n};\n\nfor (var method in instance) EventSource.prototype[method] = instance[method];\nfor (var key in EventTarget) EventSource.prototype[key] = EventTarget[key];\n\nmodule.exports = EventSource;\n","module.exports = require(\"child_process\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n\n url += '/' + 2 + '?' + query;\n\n var xhr = Runtime.createXHR();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n let { status, responseText } = xhr;\n if (status !== 200) {\n Logger.debug(\n `TimelineSender Error: received ${status} from stats.pusher.com`\n );\n return;\n }\n\n try {\n var { host } = JSON.parse(responseText);\n } catch (e) {\n Logger.debug(`TimelineSenderError: invalid response ${responseText}`);\n }\n if (host) {\n sender.host = host;\n }\n }\n };\n\n xhr.send();\n };\n};\n\nvar xhr = {\n name: 'xhr',\n getAgent\n};\n\nexport default xhr;\n","import Isomorphic from 'isomorphic/runtime';\nimport { Client as WebSocket } from 'faye-websocket';\nimport { XMLHttpRequest } from 'xmlhttprequest';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport xhrTimeline from 'isomorphic/timeline/xhr_timeline';\nimport { randomInt } from 'crypto';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst NodeJS: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n createSocketRequest,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: xhrTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n return randomInt(max);\n }\n};\n\nexport default NodeJS;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/react-native/pusher.js b/dist/react-native/pusher.js index ef3dd7219..d3cf68b65 100644 --- a/dist/react-native/pusher.js +++ b/dist/react-native/pusher.js @@ -1,9 +1,9 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. */ -module.exports=function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=15)}([function(t,n,e){"use strict";(function(t){e.d(n,"f",(function(){return i})),e.d(n,"m",(function(){return s})),e.d(n,"d",(function(){return a})),e.d(n,"k",(function(){return c})),e.d(n,"i",(function(){return u})),e.d(n,"n",(function(){return h})),e.d(n,"c",(function(){return f})),e.d(n,"j",(function(){return l})),e.d(n,"g",(function(){return p})),e.d(n,"h",(function(){return d})),e.d(n,"b",(function(){return y})),e.d(n,"a",(function(){return v})),e.d(n,"e",(function(){return b})),e.d(n,"l",(function(){return m}));var r=e(11),o=e(2);function i(t){for(var n=[],e=1;e0)for(o=0;o=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}},C=k,T=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),P=function(t){function n(n,e){var r=t.call(this)||this;return r.id=n,r.transport=e,r.activityTimeout=e.activityTimeout,r.bindListeners(),r}return T(n,t),n.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},n.prototype.send=function(t){return this.transport.send(t)},n.prototype.send_event=function(t,n,e){var r={event:t,data:n};return e&&(r.channel=e),l.a.debug("Event sent",r),this.send(C.encodeMessage(r))},n.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},n.prototype.close=function(){this.transport.close()},n.prototype.bindListeners=function(){var t=this,n={message:function(n){var e;try{e=C.decodeMessage(n)}catch(e){t.emit("error",{type:"MessageParseError",error:e,data:n.data})}if(void 0!==e){switch(l.a.debug("Event recd",e),e.event){case"pusher:error":t.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":t.emit("ping");break;case"pusher:pong":t.emit("pong")}t.emit("message",e)}},activity:function(){t.emit("activity")},error:function(n){t.emit("error",n)},closed:function(n){e(),n&&n.code&&t.handleCloseEvent(n),t.transport=null,t.emit("closed")}},e=function(){r.k(n,(function(n,e){t.transport.unbind(e,n)}))};r.k(n,(function(n,e){t.transport.bind(e,n)}))},n.prototype.handleCloseEvent=function(t){var n=C.getCloseAction(t),e=C.getCloseError(t);e&&this.emit("error",e),n&&this.emit(n,{action:n,error:e})},n}(f.a),O=function(){function t(t,n){this.transport=t,this.callback=n,this.bindListeners()}return t.prototype.close=function(){this.unbindListeners(),this.transport.close()},t.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){var e;t.unbindListeners();try{e=C.processHandshake(n)}catch(n){return t.finish("error",{error:n}),void t.transport.close()}"connected"===e.action?t.finish("connected",{connection:new P(e.id,t.transport),activityTimeout:e.activityTimeout}):(t.finish(e.action,{error:e.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var e=C.getCloseAction(n)||"backoff",r=C.getCloseError(n);t.finish(e,{error:r})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},t.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},t.prototype.finish=function(t,n){this.callback(r.f({transport:this.transport,action:t},n))},t}(),A=function(){function t(t,n){this.timeline=t,this.options=n||{}}return t.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(It.TimelineTransport.getAgent(this,t),n)},t}(),E=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),x=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),L=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),U=(function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}E(n,t)}(Error),function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error)),R=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),j=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),M=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),I=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return E(n,t),n}(Error),N=function(t){function n(n,e){var r=this.constructor,o=t.call(this,e)||this;return o.status=n,Object.setPrototypeOf(o,r.prototype),o}return E(n,t),n}(Error),D={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},z=function(t){var n,e=D.urls[t];return e?(e.fullUrl?n=e.fullUrl:e.path&&(n=D.baseUrl+e.path),n?"See: "+n:""):""},H=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),B=function(t){function n(n,e){var r=t.call(this,(function(t,e){l.a.debug("No callbacks on "+n+" for "+t)}))||this;return r.name=n,r.pusher=e,r.subscribed=!1,r.subscriptionPending=!1,r.subscriptionCancelled=!1,r}return H(n,t),n.prototype.authorize=function(t,n){return n(null,{auth:""})},n.prototype.trigger=function(t,n){if(0!==t.indexOf("client-"))throw new x("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var e=z("triggeringClientEvents");l.a.warn("Client event triggered before channel 'subscription_succeeded' event . "+e)}return this.pusher.send_event(t,n,this.name)},n.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},n.prototype.handleEvent=function(t){var n=t.event,e=t.data;if("pusher_internal:subscription_succeeded"===n)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===n)this.handleSubscriptionCountEvent(t);else if(0!==n.indexOf("pusher_internal:")){this.emit(n,e,{})}},n.prototype.handleSubscriptionSucceededEvent=function(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)},n.prototype.handleSubscriptionCountEvent=function(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)},n.prototype.subscribe=function(){var t=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(function(n,e){n?(t.subscriptionPending=!1,l.a.error(n.toString()),t.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:n.message},n instanceof N?{status:n.status}:{}))):t.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:t.name})})))},n.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},n.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},n.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},n}(f.a),F=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),q=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return F(n,t),n.prototype.authorize=function(t,n){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},n)},n}(B),Y=function(){function t(){this.reset()}return t.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},t.prototype.each=function(t){var n=this;r.k(this.members,(function(e,r){t(n.get(r))}))},t.prototype.setMyID=function(t){this.myID=t},t.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},t.prototype.addMember=function(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},t.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},t.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},t}(),K=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),J=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}c((r=r.apply(t,n||[])).next())}))},X=function(t,n){var e,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(e)throw new TypeError("Generator is already executing.");for(;s;)try{if(e=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new $.a(t||0,(function(){n.disconnectInternally(),n.connect()}))},n.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},n.prototype.setUnavailableTimer=function(){var t=this;this.unavailableTimer=new $.a(this.options.unavailableTimeout,(function(){t.updateState("unavailable")}))},n.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},n.prototype.sendActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new $.a(this.options.pongTimeout,(function(){t.timeline.error({pong_timed_out:t.options.pongTimeout}),t.retryIn(0)}))},n.prototype.resetActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new $.a(this.activityTimeout,(function(){t.sendActivityCheck()})))},n.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},n.prototype.buildConnectionCallbacks=function(t){var n=this;return r.f({},t,{message:function(t){n.resetActivityCheck(),n.emit("message",t)},ping:function(){n.send_event("pusher:pong",{})},activity:function(){n.resetActivityCheck()},error:function(t){n.emit("error",t)},closed:function(){n.abandonConnection(),n.shouldRetry()&&n.retryIn(1e3)}})},n.prototype.buildHandshakeCallbacks=function(t){var n=this;return r.f({},t,{connected:function(t){n.activityTimeout=Math.min(n.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),n.clearUnavailableTimer(),n.setConnection(t.connection),n.socket_id=n.connection.id,n.updateState("connected",{socket_id:n.socket_id})}})},n.prototype.buildErrorCallbacks=function(){var t=this,n=function(n){return function(e){e.error&&t.emit("error",{type:"WebSocketError",error:e.error}),n(e)}};return{tls_only:n((function(){t.usingTLS=!0,t.updateStrategy(),t.retryIn(0)})),refused:n((function(){t.disconnect()})),backoff:n((function(){t.retryIn(1e3)})),retry:n((function(){t.retryIn(0)}))}},n.prototype.setConnection=function(t){for(var n in this.connection=t,this.connectionCallbacks)this.connection.bind(n,this.connectionCallbacks[n]);this.resetActivityCheck()},n.prototype.abandonConnection=function(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var n=this.connection;return this.connection=null,n}},n.prototype.updateState=function(t,n){var e=this.state;if(this.state=t,e!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+n.socket_id),l.a.debug("State changed",e+" -> "+r),this.timeline.info({state:t,params:n}),this.emit("state_change",{previous:e,current:t}),this.emit(t,n)}},n.prototype.shouldRetry=function(){return"connecting"===this.state||"connected"===this.state},n}(f.a),et=function(){function t(){this.channels={}}return t.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=function(t,n){if(0===t.indexOf("private-encrypted-")){if(n.config.nacl)return rt.createEncryptedChannel(t,n,n.config.nacl);var e=z("encryptedChannelSupport");throw new j("Tried to subscribe to a private-encrypted- channel but no nacl implementation available. "+e)}if(0===t.indexOf("private-"))return rt.createPrivateChannel(t,n);if(0===t.indexOf("presence-"))return rt.createPresenceChannel(t,n);if(0===t.indexOf("#"))throw new L('Cannot create a channel with name "'+t+'".');return rt.createChannel(t,n)}(t,n)),this.channels[t]},t.prototype.all=function(){return r.n(this.channels)},t.prototype.find=function(t){return this.channels[t]},t.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},t.prototype.disconnect=function(){r.k(this.channels,(function(t){t.disconnect()}))},t}();var rt={createChannels:function(){return new et},createConnectionManager:function(t,n){return new nt(t,n)},createChannel:function(t,n){return new B(t,n)},createPrivateChannel:function(t,n){return new q(t,n)},createPresenceChannel:function(t,n){return new W(t,n)},createEncryptedChannel:function(t,n,e){return new Q(t,n,e)},createTimelineSender:function(t,n){return new A(t,n)},createHandshake:function(t,n){return new O(t,n)},createAssistantToTheTransportManager:function(t,n,e){return new S(t,n,e)}},ot=function(){function t(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return t.prototype.getAssistant=function(t){return rt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},t.prototype.isAlive=function(){return this.livesLeft>0},t.prototype.reportDeath=function(){this.livesLeft-=1},t}(),it=function(){function t(t,n){this.strategies=t,this.loop=Boolean(n.loop),this.failFast=Boolean(n.failFast),this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return t.prototype.isSupported=function(){return r.b(this.strategies,h.a.method("isSupported"))},t.prototype.connect=function(t,n){var e=this,r=this.strategies,o=0,i=this.timeout,s=null,a=function(c,u){u?n(null,u):(o+=1,e.loop&&(o%=r.length),o0&&(o=new $.a(e.timeout,(function(){i.abort(),r(!0)}))),i=t.connect(n,(function(t,n){t&&o&&o.isRunning()&&!e.failFast||(o&&o.ensureAborted(),r(t,n))})),{abort:function(){o&&o.ensureAborted(),i.abort()},forceMinPriority:function(t){i.forceMinPriority(t)}}},t}(),st=function(){function t(t){this.strategies=t}return t.prototype.isSupported=function(){return r.b(this.strategies,h.a.method("isSupported"))},t.prototype.connect=function(t,n){return function(t,n,e){var o=r.j(t,(function(t,r,o,i){return t.connect(n,e(r,i))}));return{abort:function(){r.c(o,at)},forceMinPriority:function(t){r.c(o,(function(n){n.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,e){return function(o,i){e[t].error=o,o?function(t){return r.a(t,(function(t){return Boolean(t.error)}))}(e)&&n(!0):(r.c(e,(function(t){t.forceMinPriority(i.transport.priority)})),n(null,i))}}))},t}();function at(t){t.error||t.aborted||(t.abort(),t.aborted=!0)}var ct=function(){function t(t,n,e){this.strategy=t,this.transports=n,this.ttl=e.ttl||18e5,this.usingTLS=e.useTLS,this.timeline=e.timeline}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e=this.usingTLS,o=function(t){var n=It.getLocalStorage();if(n)try{var e=n[ut(t)];if(e)return JSON.parse(e)}catch(n){ht(t)}return null}(e),i=[this.strategy];if(o&&o.timestamp+this.ttl>=h.a.now()){var s=this.transports[o.transport];s&&(this.timeline.info({cached:!0,transport:o.transport,latency:o.latency}),i.push(new it([s],{timeout:2*o.latency+1e3,failFast:!0})))}var a=h.a.now(),c=i.pop().connect(t,(function o(s,u){s?(ht(e),i.length>0?(a=h.a.now(),c=i.pop().connect(t,o)):n(s)):(!function(t,n,e){var o=It.getLocalStorage();if(o)try{o[ut(t)]=r.l({timestamp:h.a.now(),transport:n,latency:e})}catch(t){}}(e,u.transport.name,h.a.now()-a),n(null,u))}));return{abort:function(){c.abort()},forceMinPriority:function(n){t=n,c&&c.forceMinPriority(n)}}},t}();function ut(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function ht(t){var n=It.getLocalStorage();if(n)try{delete n[ut(t)]}catch(t){}}var ft=function(){function t(t,n){var e=n.delay;this.strategy=t,this.options={delay:e}}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e,r=this.strategy,o=new $.a(this.options.delay,(function(){e=r.connect(t,n)}));return{abort:function(){o.ensureAborted(),e&&e.abort()},forceMinPriority:function(n){t=n,e&&e.forceMinPriority(n)}}},t}(),lt=function(){function t(t,n,e){this.test=t,this.trueBranch=n,this.falseBranch=e}return t.prototype.isSupported=function(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()},t.prototype.connect=function(t,n){return(this.test()?this.trueBranch:this.falseBranch).connect(t,n)},t}(),pt=function(){function t(t){this.strategy=t}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e=this.strategy.connect(t,(function(t,r){r&&e.abort(),n(t,r)}));return e},t}();function dt(t){return function(){return t.isSupported()}}var yt,vt=function(t,n,e){var o={};function i(n,r,i,s,a){var c=e(t,n,r,i,s,a);return o[n]=c,c}var s,a=Object.assign({},n,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),c=r.f({},a,{useTLS:!0}),u=Object.assign({},n,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),h={loop:!0,timeout:15e3,timeoutLimit:6e4},f=new ot({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=new ot({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),p=i("ws","ws",3,a,f),d=i("wss","ws",3,c,f),y=i("xhr_streaming","xhr_streaming",1,u,l),v=i("xhr_polling","xhr_polling",1,u),g=new it([p],h),b=new it([d],h),m=new it([y],h),_=new it([v],h),w=new it([new lt(dt(m),new st([m,new ft(_,{delay:4e3})]),_)],h);return s=n.useTLS?new st([g,new ft(w,{delay:2e3})]):new st([g,new ft(b,{delay:2e3}),new ft(w,{delay:5e3})]),new ct(new pt(new lt(dt(p),s,w)),o,{ttl:18e5,timeline:n.timeline,useTLS:n.useTLS})},gt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),bt=function(t){function n(n,e,r){var o=t.call(this)||this;return o.hooks=n,o.method=e,o.url=r,o}return gt(n,t),n.prototype.start=function(t){var n=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){n.close()},It.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)},n.prototype.close=function(){this.unloader&&(It.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},n.prototype.onChunk=function(t,n){for(;;){var e=this.advanceBuffer(n);if(!e)break;this.emit("chunk",{status:t,data:e})}this.isBufferTooLong(n)&&this.emit("buffer_too_long")},n.prototype.advanceBuffer=function(t){var n=t.slice(this.position),e=n.indexOf("\n");return-1!==e?(this.position+=e+1,n.slice(0,e)):null},n.prototype.isBufferTooLong=function(t){return this.position===t.length&&t.length>262144},n}(f.a);!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(yt||(yt={}));var mt=yt,_t=1;function wt(t){var n=-1===t.indexOf("?")?"?":"&";return t+n+"t="+ +new Date+"&n="+_t++}function St(t){return It.randomInt(t)}var kt=function(){function t(t,n){this.hooks=t,this.session=St(1e3)+"/"+function(t){for(var n=[],e=0;e0&&t.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&t.onChunk(n.status,n.responseText),t.emit("finished",n.status),t.close()}},n},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},Ot={getDefaultStrategy:vt,Transports:w,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket:function(t){return this.createSocket(Ct,t)},createPollingSocket:function(t){return this.createSocket(Tt,t)},createSocket:function(t,n){return new kt(t,n)},createXHR:function(t,n){return this.createRequest(Pt,t,n)},createRequest:function(t,n,e){return new bt(t,n,e)}},setup:function(t){t.ready()},getLocalStorage:function(){},getClientFeatures:function(){return r.i(r.h({ws:w.ws},(function(t){return t.isSupported({})})))},getProtocol:function(){return"http:"},isXHRSupported:function(){return!0},createSocketRequest:function(t,n){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,n);throw"Cross-origin HTTP requests are not supported"},createXHR:function(){return new(this.getXHRAPI())},createWebSocket:function(t){return new(this.getWebSocketAPI())(t)},addUnloadListener:function(t){},removeUnloadListener:function(t){}},At=e(10),Et=e.n(At),xt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}();function Lt(t){return"none"!==t.type.toLowerCase()}var Ut,Rt=new(function(t){function n(){var n=t.call(this)||this;return n.online=!0,Et.a.fetch().then((function(t){n.online=Lt(t)})),Et.a.addEventListener((function(t){var e=Lt(t);n.online!==e&&(n.online=e,n.online?n.emit("online"):n.emit("offline"))})),n}return xt(n,t),n.prototype.isOnline=function(){return this.online},n}(f.a));!function(t){t.UserAuthentication="user-authentication",t.ChannelAuthorization="channel-authorization"}(Ut||(Ut={}));var jt,Mt=function(t,n,e,r,o){var i=It.createXHR();for(var s in i.open("POST",e.endpoint,!0),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.headers)i.setRequestHeader(s,e.headers[s]);if(null!=e.headersProvider){var a=e.headersProvider();for(var s in a)i.setRequestHeader(s,a[s])}return i.onreadystatechange=function(){if(4===i.readyState)if(200===i.status){var t=void 0,n=!1;try{t=JSON.parse(i.responseText),n=!0}catch(t){o(new N(200,"JSON returned from "+r.toString()+" endpoint was invalid, yet status code was 200. Data was: "+i.responseText),null)}n&&o(null,t)}else{var s="";switch(r){case Ut.UserAuthentication:s=z("authenticationEndpoint");break;case Ut.ChannelAuthorization:s="Clients must be authorized to join private or presence channels. "+z("authorizationEndpoint")}o(new N(i.status,"Unable to retrieve auth string from "+r.toString()+" endpoint - received status: "+i.status+" from "+e.endpoint+". "+s),null)}},i.send(n),i},It={getDefaultStrategy:Ot.getDefaultStrategy,Transports:Ot.Transports,setup:Ot.setup,getProtocol:Ot.getProtocol,isXHRSupported:Ot.isXHRSupported,getLocalStorage:Ot.getLocalStorage,createXHR:Ot.createXHR,createWebSocket:Ot.createWebSocket,addUnloadListener:Ot.addUnloadListener,removeUnloadListener:Ot.removeUnloadListener,transportConnectionInitializer:Ot.transportConnectionInitializer,createSocketRequest:Ot.createSocketRequest,HTTPFactory:Ot.HTTPFactory,TimelineTransport:{name:"xhr",getAgent:function(t,n){return function(e,o){var i="http"+(n?"s":"")+"://"+(t.host||t.options.host)+t.options.path;i+="/2?"+r.e(e);var s=It.createXHR();s.open("GET",i,!0),s.onreadystatechange=function(){if(4===s.readyState){var n=s.status,e=s.responseText;if(200!==n)return void l.a.debug("TimelineSender Error: received "+n+" from stats.pusher.com");try{var r=JSON.parse(e).host}catch(t){l.a.debug("TimelineSenderError: invalid response "+e)}r&&(t.host=r)}},s.send()}}},getAuthorizers:function(){return{ajax:Mt}},getWebSocketAPI:function(){return WebSocket},getXHRAPI:function(){return XMLHttpRequest},getNetwork:function(){return Rt},randomInt:function(t){return Math.floor(Math.random()*t)}};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(jt||(jt={}));var Nt=jt,Dt=function(){function t(t,n,e){this.key=t,this.session=n,this.events=[],this.options=e||{},this.sent=0,this.uniqueID=0}return t.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(r.f({},n,{timestamp:h.a.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},t.prototype.error=function(t){this.log(Nt.ERROR,t)},t.prototype.info=function(t){this.log(Nt.INFO,t)},t.prototype.debug=function(t){this.log(Nt.DEBUG,t)},t.prototype.isEmpty=function(){return 0===this.events.length},t.prototype.send=function(t,n){var e=this,o=r.f({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(o,(function(t,r){t||e.sent++,n&&n(t,r)})),!0},t.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},t}(),zt=function(){function t(t,n,e,r){this.name=t,this.priority=n,this.transport=e,this.options=r||{}}return t.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},t.prototype.connect=function(t,n){var e=this;if(!this.isSupported())return Ht(new I,n);if(this.priority>>18&63),n+=this._encodeByte(r>>>12&63),n+=this._encodeByte(r>>>6&63),n+=this._encodeByte(r>>>0&63)}var o=t.length-e;if(o>0){r=t[e]<<16|(2===o?t[e+1]<<8:0);n+=this._encodeByte(r>>>18&63),n+=this._encodeByte(r>>>12&63),n+=2===o?this._encodeByte(r>>>6&63):this._paddingCharacter||"",n+=this._paddingCharacter||""}return n},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var n=this._getPaddingLength(t),e=t.length-n,r=new Uint8Array(this.maxDecodedLength(e)),o=0,i=0,s=0,a=0,c=0,u=0,h=0;i>>4,r[o++]=c<<4|u>>>2,r[o++]=u<<6|h,s|=256&a,s|=256&c,s|=256&u,s|=256&h;if(i>>4,s|=256&a,s|=256&c),i>>2,s|=256&u),i>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-15,n+=62-t>>>8&3,String.fromCharCode(n)},t.prototype._decodeChar=function(t){var n=256;return n+=(42-t&t-44)>>>8&-256+t-43+62,n+=(46-t&t-48)>>>8&-256+t-47+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var n=0;if(this._paddingCharacter){for(var e=t.length-1;e>=0&&t[e]===this._paddingCharacter;e--)n++;if(t.length<4||n>2)throw new Error("Base64Coder: incorrect padding")}return n},t}();n.Coder=i;var s=new i;n.encode=function(t){return s.encode(t)},n.decode=function(t){return s.decode(t)};var a=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return o(n,t),n.prototype._encodeByte=function(t){var n=t;return n+=65,n+=25-t>>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-13,n+=62-t>>>8&49,String.fromCharCode(n)},n.prototype._decodeChar=function(t){var n=256;return n+=(44-t&t-46)>>>8&-256+t-45+62,n+=(94-t&t-96)>>>8&-256+t-95+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},n}(i);n.URLSafeCoder=a;var c=new a;n.encodeURLSafe=function(t){return c.encode(t)},n.decodeURLSafe=function(t){return c.decode(t)},n.encodedLength=function(t){return s.encodedLength(t)},n.maxDecodedLength=function(t){return s.maxDecodedLength(t)},n.decodedLength=function(t){return s.decodedLength(t)}},function(t,n,e){"use strict";var r=function(){function t(t,n,e,r){var o=this;this.clear=n,this.timer=t((function(){o.timer&&(o.timer=r(o.timer))}),e)}return t.prototype.isRunning=function(){return null!==this.timer},t.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},t}();n.a=r},function(t,n){t.exports=require("@react-native-community/netinfo")},function(t,n,e){"use strict";(function(t){function r(t){return l(h(t))}e.d(n,"a",(function(){return r}));for(var o=String.fromCharCode,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s={},a=0,c=i.length;a>>6)+o(128|63&n):o(224|n>>>12&15)+o(128|n>>>6&63)+o(128|63&n)},h=function(t){return t.replace(/[^\x00-\x7F]/g,u)},f=function(t){var n=[0,2,1][t.length%3],e=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[i.charAt(e>>>18),i.charAt(e>>>12&63),n>=2?"=":i.charAt(e>>>6&63),n>=1?"=":i.charAt(63&e)].join("")},l=t.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,f)}}).call(this,e(6))},function(t,n,e){"use strict";var r=e(0),o=function(){function t(){this._callbacks={}}return t.prototype.get=function(t){return this._callbacks[i(t)]},t.prototype.add=function(t,n,e){var r=i(t);this._callbacks[r]=this._callbacks[r]||[],this._callbacks[r].push({fn:n,context:e})},t.prototype.remove=function(t,n,e){if(t||n||e){var o=t?[i(t)]:r.i(this._callbacks);n||e?this.removeCallback(o,n,e):this.removeAllCallbacks(o)}else this._callbacks={}},t.prototype.removeCallback=function(t,n,e){r.c(t,(function(t){this._callbacks[t]=r.g(this._callbacks[t]||[],(function(t){return n&&n!==t.fn||e&&e!==t.context})),0===this._callbacks[t].length&&delete this._callbacks[t]}),this)},t.prototype.removeAllCallbacks=function(t){r.c(t,(function(t){delete this._callbacks[t]}),this)},t}();function i(t){return"_"+t}n.a=o},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r="utf8: invalid source encoding";function o(t){for(var n=0,e=0;e=t.length-1)throw new Error("utf8: invalid string");e++,n+=4}}return n}n.encode=function(t){for(var n=new Uint8Array(o(t)),e=0,r=0;r>6,n[e++]=128|63&i):i<55296?(n[e++]=224|i>>12,n[e++]=128|i>>6&63,n[e++]=128|63&i):(r++,i=(1023&i)<<10,i|=1023&t.charCodeAt(r),i+=65536,n[e++]=240|i>>18,n[e++]=128|i>>12&63,n[e++]=128|i>>6&63,n[e++]=128|63&i)}return n},n.encodedLength=o,n.decode=function(t){for(var n=[],e=0;e=t.length)throw new Error(r);if(128!=(192&(s=t[++e])))throw new Error(r);o=(31&o)<<6|63&s,i=128}else if(o<240){if(e>=t.length-1)throw new Error(r);var s=t[++e],a=t[++e];if(128!=(192&s)||128!=(192&a))throw new Error(r);o=(15&o)<<12|(63&s)<<6|63&a,i=2048}else{if(!(o<248))throw new Error(r);if(e>=t.length-2)throw new Error(r);s=t[++e],a=t[++e];var c=t[++e];if(128!=(192&s)||128!=(192&a)||128!=(192&c))throw new Error(r);o=(15&o)<<18|(63&s)<<12|(63&a)<<6|63&c,i=65536}if(o=55296&&o<=57343)throw new Error(r);if(o>=65536){if(o>1114111)throw new Error(r);o-=65536,n.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}n.push(String.fromCharCode(o))}return n.join("")}},function(t,n,e){!function(t){"use strict";var n=function(t){var n,e=new Float64Array(16);if(t)for(n=0;n>24&255,t[n+1]=e>>16&255,t[n+2]=e>>8&255,t[n+3]=255&e,t[n+4]=r>>24&255,t[n+5]=r>>16&255,t[n+6]=r>>8&255,t[n+7]=255&r}function y(t,n,e,r,o){var i,s=0;for(i=0;i>>8)-1}function v(t,n,e,r){return y(t,n,e,r,16)}function g(t,n,e,r){return y(t,n,e,r,32)}function b(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,p=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,_=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,w=i,S=s,k=a,C=c,T=u,P=h,O=f,A=l,E=p,x=d,L=y,U=v,R=g,j=b,M=m,I=_,N=0;N<20;N+=2)w^=(o=(R^=(o=(E^=(o=(T^=(o=w+R|0)<<7|o>>>25)+w|0)<<9|o>>>23)+T|0)<<13|o>>>19)+E|0)<<18|o>>>14,P^=(o=(S^=(o=(j^=(o=(x^=(o=P+S|0)<<7|o>>>25)+P|0)<<9|o>>>23)+x|0)<<13|o>>>19)+j|0)<<18|o>>>14,L^=(o=(O^=(o=(k^=(o=(M^=(o=L+O|0)<<7|o>>>25)+L|0)<<9|o>>>23)+M|0)<<13|o>>>19)+k|0)<<18|o>>>14,I^=(o=(U^=(o=(A^=(o=(C^=(o=I+U|0)<<7|o>>>25)+I|0)<<9|o>>>23)+C|0)<<13|o>>>19)+A|0)<<18|o>>>14,w^=(o=(C^=(o=(k^=(o=(S^=(o=w+C|0)<<7|o>>>25)+w|0)<<9|o>>>23)+S|0)<<13|o>>>19)+k|0)<<18|o>>>14,P^=(o=(T^=(o=(A^=(o=(O^=(o=P+T|0)<<7|o>>>25)+P|0)<<9|o>>>23)+O|0)<<13|o>>>19)+A|0)<<18|o>>>14,L^=(o=(x^=(o=(E^=(o=(U^=(o=L+x|0)<<7|o>>>25)+L|0)<<9|o>>>23)+U|0)<<13|o>>>19)+E|0)<<18|o>>>14,I^=(o=(M^=(o=(j^=(o=(R^=(o=I+M|0)<<7|o>>>25)+I|0)<<9|o>>>23)+R|0)<<13|o>>>19)+j|0)<<18|o>>>14;w=w+i|0,S=S+s|0,k=k+a|0,C=C+c|0,T=T+u|0,P=P+h|0,O=O+f|0,A=A+l|0,E=E+p|0,x=x+d|0,L=L+y|0,U=U+v|0,R=R+g|0,j=j+b|0,M=M+m|0,I=I+_|0,t[0]=w>>>0&255,t[1]=w>>>8&255,t[2]=w>>>16&255,t[3]=w>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=P>>>0&255,t[21]=P>>>8&255,t[22]=P>>>16&255,t[23]=P>>>24&255,t[24]=O>>>0&255,t[25]=O>>>8&255,t[26]=O>>>16&255,t[27]=O>>>24&255,t[28]=A>>>0&255,t[29]=A>>>8&255,t[30]=A>>>16&255,t[31]=A>>>24&255,t[32]=E>>>0&255,t[33]=E>>>8&255,t[34]=E>>>16&255,t[35]=E>>>24&255,t[36]=x>>>0&255,t[37]=x>>>8&255,t[38]=x>>>16&255,t[39]=x>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=U>>>0&255,t[45]=U>>>8&255,t[46]=U>>>16&255,t[47]=U>>>24&255,t[48]=R>>>0&255,t[49]=R>>>8&255,t[50]=R>>>16&255,t[51]=R>>>24&255,t[52]=j>>>0&255,t[53]=j>>>8&255,t[54]=j>>>16&255,t[55]=j>>>24&255,t[56]=M>>>0&255,t[57]=M>>>8&255,t[58]=M>>>16&255,t[59]=M>>>24&255,t[60]=I>>>0&255,t[61]=I>>>8&255,t[62]=I>>>16&255,t[63]=I>>>24&255}(t,n,e,r)}function m(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,p=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,_=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,w=0;w<20;w+=2)i^=(o=(g^=(o=(p^=(o=(u^=(o=i+g|0)<<7|o>>>25)+i|0)<<9|o>>>23)+u|0)<<13|o>>>19)+p|0)<<18|o>>>14,h^=(o=(s^=(o=(b^=(o=(d^=(o=h+s|0)<<7|o>>>25)+h|0)<<9|o>>>23)+d|0)<<13|o>>>19)+b|0)<<18|o>>>14,y^=(o=(f^=(o=(a^=(o=(m^=(o=y+f|0)<<7|o>>>25)+y|0)<<9|o>>>23)+m|0)<<13|o>>>19)+a|0)<<18|o>>>14,_^=(o=(v^=(o=(l^=(o=(c^=(o=_+v|0)<<7|o>>>25)+_|0)<<9|o>>>23)+c|0)<<13|o>>>19)+l|0)<<18|o>>>14,i^=(o=(c^=(o=(a^=(o=(s^=(o=i+c|0)<<7|o>>>25)+i|0)<<9|o>>>23)+s|0)<<13|o>>>19)+a|0)<<18|o>>>14,h^=(o=(u^=(o=(l^=(o=(f^=(o=h+u|0)<<7|o>>>25)+h|0)<<9|o>>>23)+f|0)<<13|o>>>19)+l|0)<<18|o>>>14,y^=(o=(d^=(o=(p^=(o=(v^=(o=y+d|0)<<7|o>>>25)+y|0)<<9|o>>>23)+v|0)<<13|o>>>19)+p|0)<<18|o>>>14,_^=(o=(m^=(o=(b^=(o=(g^=(o=_+m|0)<<7|o>>>25)+_|0)<<9|o>>>23)+g|0)<<13|o>>>19)+b|0)<<18|o>>>14;t[0]=i>>>0&255,t[1]=i>>>8&255,t[2]=i>>>16&255,t[3]=i>>>24&255,t[4]=h>>>0&255,t[5]=h>>>8&255,t[6]=h>>>16&255,t[7]=h>>>24&255,t[8]=y>>>0&255,t[9]=y>>>8&255,t[10]=y>>>16&255,t[11]=y>>>24&255,t[12]=_>>>0&255,t[13]=_>>>8&255,t[14]=_>>>16&255,t[15]=_>>>24&255,t[16]=f>>>0&255,t[17]=f>>>8&255,t[18]=f>>>16&255,t[19]=f>>>24&255,t[20]=l>>>0&255,t[21]=l>>>8&255,t[22]=l>>>16&255,t[23]=l>>>24&255,t[24]=p>>>0&255,t[25]=p>>>8&255,t[26]=p>>>16&255,t[27]=p>>>24&255,t[28]=d>>>0&255,t[29]=d>>>8&255,t[30]=d>>>16&255,t[31]=d>>>24&255}(t,n,e,r)}var _=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function w(t,n,e,r,o,i,s){var a,c,u=new Uint8Array(16),h=new Uint8Array(64);for(c=0;c<16;c++)u[c]=0;for(c=0;c<8;c++)u[c]=i[c];for(;o>=64;){for(b(h,u,s,_),c=0;c<64;c++)t[n+c]=e[r+c]^h[c];for(a=1,c=8;c<16;c++)a=a+(255&u[c])|0,u[c]=255&a,a>>>=8;o-=64,n+=64,r+=64}if(o>0)for(b(h,u,s,_),c=0;c=64;){for(b(c,a,o,_),s=0;s<64;s++)t[n+s]=c[s];for(i=1,s=8;s<16;s++)i=i+(255&a[s])|0,a[s]=255&i,i>>>=8;e-=64,n+=64}if(e>0)for(b(c,a,o,_),s=0;s>>13|e<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(e>>>10|r<<6),o=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|o<<9),i=255&t[8]|(255&t[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,s=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(i>>>14|s<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(s>>>11|a<<5),c=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function P(t,n,e,r,o,i){var s=new T(i);return s.update(e,r,o),s.finish(t,n),0}function O(t,n,e,r,o,i){var s=new Uint8Array(16);return P(s,0,e,r,o,i),v(t,n,s,0)}function A(t,n,e,r,o){var i;if(e<32)return-1;for(C(t,0,n,0,e,r,o),P(t,16,t,32,e-32,t),i=0;i<16;i++)t[i]=0;return 0}function E(t,n,e,r,o){var i,s=new Uint8Array(32);if(e<32)return-1;if(k(s,0,32,r,o),0!==O(n,16,n,32,e-32,s))return-1;for(C(t,0,n,0,e,r,o),i=0;i<32;i++)t[i]=0;return 0}function x(t,n){var e;for(e=0;e<16;e++)t[e]=0|n[e]}function L(t){var n,e,r=1;for(n=0;n<16;n++)e=t[n]+r+65535,r=Math.floor(e/65536),t[n]=e-65536*r;t[0]+=r-1+37*(r-1)}function U(t,n,e){for(var r,o=~(e-1),i=0;i<16;i++)r=o&(t[i]^n[i]),t[i]^=r,n[i]^=r}function R(t,e){var r,o,i,s=n(),a=n();for(r=0;r<16;r++)a[r]=e[r];for(L(a),L(a),L(a),o=0;o<2;o++){for(s[0]=a[0]-65517,r=1;r<15;r++)s[r]=a[r]-65535-(s[r-1]>>16&1),s[r-1]&=65535;s[15]=a[15]-32767-(s[14]>>16&1),i=s[15]>>16&1,s[14]&=65535,U(a,s,1-i)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function j(t,n){var e=new Uint8Array(32),r=new Uint8Array(32);return R(e,t),R(r,n),g(e,0,r,0)}function M(t){var n=new Uint8Array(32);return R(n,t),1&n[0]}function I(t,n){var e;for(e=0;e<16;e++)t[e]=n[2*e]+(n[2*e+1]<<8);t[15]&=32767}function N(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]+e[r]}function D(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]-e[r]}function z(t,n,e){var r,o,i=0,s=0,a=0,c=0,u=0,h=0,f=0,l=0,p=0,d=0,y=0,v=0,g=0,b=0,m=0,_=0,w=0,S=0,k=0,C=0,T=0,P=0,O=0,A=0,E=0,x=0,L=0,U=0,R=0,j=0,M=0,I=e[0],N=e[1],D=e[2],z=e[3],H=e[4],B=e[5],F=e[6],q=e[7],Y=e[8],K=e[9],J=e[10],X=e[11],W=e[12],G=e[13],V=e[14],Z=e[15];i+=(r=n[0])*I,s+=r*N,a+=r*D,c+=r*z,u+=r*H,h+=r*B,f+=r*F,l+=r*q,p+=r*Y,d+=r*K,y+=r*J,v+=r*X,g+=r*W,b+=r*G,m+=r*V,_+=r*Z,s+=(r=n[1])*I,a+=r*N,c+=r*D,u+=r*z,h+=r*H,f+=r*B,l+=r*F,p+=r*q,d+=r*Y,y+=r*K,v+=r*J,g+=r*X,b+=r*W,m+=r*G,_+=r*V,w+=r*Z,a+=(r=n[2])*I,c+=r*N,u+=r*D,h+=r*z,f+=r*H,l+=r*B,p+=r*F,d+=r*q,y+=r*Y,v+=r*K,g+=r*J,b+=r*X,m+=r*W,_+=r*G,w+=r*V,S+=r*Z,c+=(r=n[3])*I,u+=r*N,h+=r*D,f+=r*z,l+=r*H,p+=r*B,d+=r*F,y+=r*q,v+=r*Y,g+=r*K,b+=r*J,m+=r*X,_+=r*W,w+=r*G,S+=r*V,k+=r*Z,u+=(r=n[4])*I,h+=r*N,f+=r*D,l+=r*z,p+=r*H,d+=r*B,y+=r*F,v+=r*q,g+=r*Y,b+=r*K,m+=r*J,_+=r*X,w+=r*W,S+=r*G,k+=r*V,C+=r*Z,h+=(r=n[5])*I,f+=r*N,l+=r*D,p+=r*z,d+=r*H,y+=r*B,v+=r*F,g+=r*q,b+=r*Y,m+=r*K,_+=r*J,w+=r*X,S+=r*W,k+=r*G,C+=r*V,T+=r*Z,f+=(r=n[6])*I,l+=r*N,p+=r*D,d+=r*z,y+=r*H,v+=r*B,g+=r*F,b+=r*q,m+=r*Y,_+=r*K,w+=r*J,S+=r*X,k+=r*W,C+=r*G,T+=r*V,P+=r*Z,l+=(r=n[7])*I,p+=r*N,d+=r*D,y+=r*z,v+=r*H,g+=r*B,b+=r*F,m+=r*q,_+=r*Y,w+=r*K,S+=r*J,k+=r*X,C+=r*W,T+=r*G,P+=r*V,O+=r*Z,p+=(r=n[8])*I,d+=r*N,y+=r*D,v+=r*z,g+=r*H,b+=r*B,m+=r*F,_+=r*q,w+=r*Y,S+=r*K,k+=r*J,C+=r*X,T+=r*W,P+=r*G,O+=r*V,A+=r*Z,d+=(r=n[9])*I,y+=r*N,v+=r*D,g+=r*z,b+=r*H,m+=r*B,_+=r*F,w+=r*q,S+=r*Y,k+=r*K,C+=r*J,T+=r*X,P+=r*W,O+=r*G,A+=r*V,E+=r*Z,y+=(r=n[10])*I,v+=r*N,g+=r*D,b+=r*z,m+=r*H,_+=r*B,w+=r*F,S+=r*q,k+=r*Y,C+=r*K,T+=r*J,P+=r*X,O+=r*W,A+=r*G,E+=r*V,x+=r*Z,v+=(r=n[11])*I,g+=r*N,b+=r*D,m+=r*z,_+=r*H,w+=r*B,S+=r*F,k+=r*q,C+=r*Y,T+=r*K,P+=r*J,O+=r*X,A+=r*W,E+=r*G,x+=r*V,L+=r*Z,g+=(r=n[12])*I,b+=r*N,m+=r*D,_+=r*z,w+=r*H,S+=r*B,k+=r*F,C+=r*q,T+=r*Y,P+=r*K,O+=r*J,A+=r*X,E+=r*W,x+=r*G,L+=r*V,U+=r*Z,b+=(r=n[13])*I,m+=r*N,_+=r*D,w+=r*z,S+=r*H,k+=r*B,C+=r*F,T+=r*q,P+=r*Y,O+=r*K,A+=r*J,E+=r*X,x+=r*W,L+=r*G,U+=r*V,R+=r*Z,m+=(r=n[14])*I,_+=r*N,w+=r*D,S+=r*z,k+=r*H,C+=r*B,T+=r*F,P+=r*q,O+=r*Y,A+=r*K,E+=r*J,x+=r*X,L+=r*W,U+=r*G,R+=r*V,j+=r*Z,_+=(r=n[15])*I,s+=38*(S+=r*D),a+=38*(k+=r*z),c+=38*(C+=r*H),u+=38*(T+=r*B),h+=38*(P+=r*F),f+=38*(O+=r*q),l+=38*(A+=r*Y),p+=38*(E+=r*K),d+=38*(x+=r*J),y+=38*(L+=r*X),v+=38*(U+=r*W),g+=38*(R+=r*G),b+=38*(j+=r*V),m+=38*(M+=r*Z),i=(r=(i+=38*(w+=r*N))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),_=(r=_+o+65535)-65536*(o=Math.floor(r/65536)),i=(r=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),_=(r=_+o+65535)-65536*(o=Math.floor(r/65536)),i+=o-1+37*(o-1),t[0]=i,t[1]=s,t[2]=a,t[3]=c,t[4]=u,t[5]=h,t[6]=f,t[7]=l,t[8]=p,t[9]=d,t[10]=y,t[11]=v,t[12]=g,t[13]=b,t[14]=m,t[15]=_}function H(t,n){z(t,n,n)}function B(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=253;r>=0;r--)H(o,o),2!==r&&4!==r&&z(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function F(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=250;r>=0;r--)H(o,o),1!==r&&z(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function q(t,e,r){var o,i,s=new Uint8Array(32),a=new Float64Array(80),u=n(),h=n(),f=n(),l=n(),p=n(),d=n();for(i=0;i<31;i++)s[i]=e[i];for(s[31]=127&e[31]|64,s[0]&=248,I(a,r),i=0;i<16;i++)h[i]=a[i],l[i]=u[i]=f[i]=0;for(u[0]=l[0]=1,i=254;i>=0;--i)U(u,h,o=s[i>>>3]>>>(7&i)&1),U(f,l,o),N(p,u,f),D(u,u,f),N(f,h,l),D(h,h,l),H(l,p),H(d,u),z(u,f,u),z(f,h,p),N(p,u,f),D(u,u,f),H(h,u),D(f,l,d),z(u,f,c),N(u,u,l),z(f,f,u),z(u,l,d),z(l,h,a),H(h,p),U(u,h,o),U(f,l,o);for(i=0;i<16;i++)a[i+16]=u[i],a[i+32]=f[i],a[i+48]=h[i],a[i+64]=l[i];var y=a.subarray(32),v=a.subarray(16);return B(y,y),z(v,v,y),R(t,v),0}function Y(t,n){return q(t,n,i)}function K(t,n){return r(n,32),Y(t,n)}function J(t,n,e){var r=new Uint8Array(32);return q(r,e,n),m(t,o,r,_)}T.prototype.blocks=function(t,n,e){for(var r,o,i,s,a,c,u,h,f,l,p,d,y,v,g,b,m,_,w,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],P=this.h[3],O=this.h[4],A=this.h[5],E=this.h[6],x=this.h[7],L=this.h[8],U=this.h[9],R=this.r[0],j=this.r[1],M=this.r[2],I=this.r[3],N=this.r[4],D=this.r[5],z=this.r[6],H=this.r[7],B=this.r[8],F=this.r[9];e>=16;)l=f=0,l+=(k+=8191&(r=255&t[n+0]|(255&t[n+1])<<8))*R,l+=(C+=8191&(r>>>13|(o=255&t[n+2]|(255&t[n+3])<<8)<<3))*(5*F),l+=(T+=8191&(o>>>10|(i=255&t[n+4]|(255&t[n+5])<<8)<<6))*(5*B),l+=(P+=8191&(i>>>7|(s=255&t[n+6]|(255&t[n+7])<<8)<<9))*(5*H),f=(l+=(O+=8191&(s>>>4|(a=255&t[n+8]|(255&t[n+9])<<8)<<12))*(5*z))>>>13,l&=8191,l+=(A+=a>>>1&8191)*(5*D),l+=(E+=8191&(a>>>14|(c=255&t[n+10]|(255&t[n+11])<<8)<<2))*(5*N),l+=(x+=8191&(c>>>11|(u=255&t[n+12]|(255&t[n+13])<<8)<<5))*(5*I),l+=(L+=8191&(u>>>8|(h=255&t[n+14]|(255&t[n+15])<<8)<<8))*(5*M),p=f+=(l+=(U+=h>>>5|S)*(5*j))>>>13,p+=k*j,p+=C*R,p+=T*(5*F),p+=P*(5*B),f=(p+=O*(5*H))>>>13,p&=8191,p+=A*(5*z),p+=E*(5*D),p+=x*(5*N),p+=L*(5*I),f+=(p+=U*(5*M))>>>13,p&=8191,d=f,d+=k*M,d+=C*j,d+=T*R,d+=P*(5*F),f=(d+=O*(5*B))>>>13,d&=8191,d+=A*(5*H),d+=E*(5*z),d+=x*(5*D),d+=L*(5*N),y=f+=(d+=U*(5*I))>>>13,y+=k*I,y+=C*M,y+=T*j,y+=P*R,f=(y+=O*(5*F))>>>13,y&=8191,y+=A*(5*B),y+=E*(5*H),y+=x*(5*z),y+=L*(5*D),v=f+=(y+=U*(5*N))>>>13,v+=k*N,v+=C*I,v+=T*M,v+=P*j,f=(v+=O*R)>>>13,v&=8191,v+=A*(5*F),v+=E*(5*B),v+=x*(5*H),v+=L*(5*z),g=f+=(v+=U*(5*D))>>>13,g+=k*D,g+=C*N,g+=T*I,g+=P*M,f=(g+=O*j)>>>13,g&=8191,g+=A*R,g+=E*(5*F),g+=x*(5*B),g+=L*(5*H),b=f+=(g+=U*(5*z))>>>13,b+=k*z,b+=C*D,b+=T*N,b+=P*I,f=(b+=O*M)>>>13,b&=8191,b+=A*j,b+=E*R,b+=x*(5*F),b+=L*(5*B),m=f+=(b+=U*(5*H))>>>13,m+=k*H,m+=C*z,m+=T*D,m+=P*N,f=(m+=O*I)>>>13,m&=8191,m+=A*M,m+=E*j,m+=x*R,m+=L*(5*F),_=f+=(m+=U*(5*B))>>>13,_+=k*B,_+=C*H,_+=T*z,_+=P*D,f=(_+=O*N)>>>13,_&=8191,_+=A*I,_+=E*M,_+=x*j,_+=L*R,w=f+=(_+=U*(5*F))>>>13,w+=k*F,w+=C*B,w+=T*H,w+=P*z,f=(w+=O*D)>>>13,w&=8191,w+=A*N,w+=E*I,w+=x*M,w+=L*j,k=l=8191&(f=(f=((f+=(w+=U*R)>>>13)<<2)+f|0)+(l&=8191)|0),C=p+=f>>>=13,T=d&=8191,P=y&=8191,O=v&=8191,A=g&=8191,E=b&=8191,x=m&=8191,L=_&=8191,U=w&=8191,n+=16,e-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=P,this.h[4]=O,this.h[5]=A,this.h[6]=E,this.h[7]=x,this.h[8]=L,this.h[9]=U},T.prototype.finish=function(t,n){var e,r,o,i,s=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(e=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=e,e=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*e,e=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=e,e=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=e,s[0]=this.h[0]+5,e=s[0]>>>13,s[0]&=8191,i=1;i<10;i++)s[i]=this.h[i]+e,e=s[i]>>>13,s[i]&=8191;for(s[9]-=8192,r=(1^e)-1,i=0;i<10;i++)s[i]&=r;for(r=~r,i=0;i<10;i++)this.h[i]=this.h[i]&r|s[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;t[n+0]=this.h[0]>>>0&255,t[n+1]=this.h[0]>>>8&255,t[n+2]=this.h[1]>>>0&255,t[n+3]=this.h[1]>>>8&255,t[n+4]=this.h[2]>>>0&255,t[n+5]=this.h[2]>>>8&255,t[n+6]=this.h[3]>>>0&255,t[n+7]=this.h[3]>>>8&255,t[n+8]=this.h[4]>>>0&255,t[n+9]=this.h[4]>>>8&255,t[n+10]=this.h[5]>>>0&255,t[n+11]=this.h[5]>>>8&255,t[n+12]=this.h[6]>>>0&255,t[n+13]=this.h[6]>>>8&255,t[n+14]=this.h[7]>>>0&255,t[n+15]=this.h[7]>>>8&255},T.prototype.update=function(t,n,e){var r,o;if(this.leftover){for((o=16-this.leftover)>e&&(o=e),r=0;r=16&&(o=e-e%16,this.blocks(t,n,o),n+=o,e-=o),e){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+W,x[S]=e[k+0]<<24|e[k+1]<<16|e[k+2]<<8|e[k+3],L[S]=e[k+4]<<24|e[k+5]<<16|e[k+6]<<8|e[k+7];for(S=0;S<80;S++)if(o=U,i=R,s=j,a=M,c=I,u=N,h=D,z,l=H,p=B,d=F,y=q,v=Y,g=K,b=J,X,P=65535&(T=X),O=T>>>16,A=65535&(C=z),E=C>>>16,P+=65535&(T=(Y>>>14|I<<18)^(Y>>>18|I<<14)^(I>>>9|Y<<23)),O+=T>>>16,A+=65535&(C=(I>>>14|Y<<18)^(I>>>18|Y<<14)^(Y>>>9|I<<23)),E+=C>>>16,P+=65535&(T=Y&K^~Y&J),O+=T>>>16,A+=65535&(C=I&N^~I&D),E+=C>>>16,P+=65535&(T=G[2*S+1]),O+=T>>>16,A+=65535&(C=G[2*S]),E+=C>>>16,C=x[S%16],O+=(T=L[S%16])>>>16,A+=65535&C,E+=C>>>16,A+=(O+=(P+=65535&T)>>>16)>>>16,P=65535&(T=w=65535&P|O<<16),O=T>>>16,A=65535&(C=_=65535&A|(E+=A>>>16)<<16),E=C>>>16,P+=65535&(T=(H>>>28|U<<4)^(U>>>2|H<<30)^(U>>>7|H<<25)),O+=T>>>16,A+=65535&(C=(U>>>28|H<<4)^(H>>>2|U<<30)^(H>>>7|U<<25)),E+=C>>>16,O+=(T=H&B^H&F^B&F)>>>16,A+=65535&(C=U&R^U&j^R&j),E+=C>>>16,f=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,m=65535&P|O<<16,P=65535&(T=y),O=T>>>16,A=65535&(C=a),E=C>>>16,O+=(T=w)>>>16,A+=65535&(C=_),E+=C>>>16,R=o,j=i,M=s,I=a=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,N=c,D=u,z=h,U=f,B=l,F=p,q=d,Y=y=65535&P|O<<16,K=v,J=g,X=b,H=m,S%16==15)for(k=0;k<16;k++)C=x[k],P=65535&(T=L[k]),O=T>>>16,A=65535&C,E=C>>>16,C=x[(k+9)%16],P+=65535&(T=L[(k+9)%16]),O+=T>>>16,A+=65535&C,E+=C>>>16,_=x[(k+1)%16],P+=65535&(T=((w=L[(k+1)%16])>>>1|_<<31)^(w>>>8|_<<24)^(w>>>7|_<<25)),O+=T>>>16,A+=65535&(C=(_>>>1|w<<31)^(_>>>8|w<<24)^_>>>7),E+=C>>>16,_=x[(k+14)%16],O+=(T=((w=L[(k+14)%16])>>>19|_<<13)^(_>>>29|w<<3)^(w>>>6|_<<26))>>>16,A+=65535&(C=(_>>>19|w<<13)^(w>>>29|_<<3)^_>>>6),E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,x[k]=65535&A|E<<16,L[k]=65535&P|O<<16;P=65535&(T=H),O=T>>>16,A=65535&(C=U),E=C>>>16,C=t[0],O+=(T=n[0])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[0]=U=65535&A|E<<16,n[0]=H=65535&P|O<<16,P=65535&(T=B),O=T>>>16,A=65535&(C=R),E=C>>>16,C=t[1],O+=(T=n[1])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[1]=R=65535&A|E<<16,n[1]=B=65535&P|O<<16,P=65535&(T=F),O=T>>>16,A=65535&(C=j),E=C>>>16,C=t[2],O+=(T=n[2])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[2]=j=65535&A|E<<16,n[2]=F=65535&P|O<<16,P=65535&(T=q),O=T>>>16,A=65535&(C=M),E=C>>>16,C=t[3],O+=(T=n[3])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[3]=M=65535&A|E<<16,n[3]=q=65535&P|O<<16,P=65535&(T=Y),O=T>>>16,A=65535&(C=I),E=C>>>16,C=t[4],O+=(T=n[4])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[4]=I=65535&A|E<<16,n[4]=Y=65535&P|O<<16,P=65535&(T=K),O=T>>>16,A=65535&(C=N),E=C>>>16,C=t[5],O+=(T=n[5])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[5]=N=65535&A|E<<16,n[5]=K=65535&P|O<<16,P=65535&(T=J),O=T>>>16,A=65535&(C=D),E=C>>>16,C=t[6],O+=(T=n[6])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[6]=D=65535&A|E<<16,n[6]=J=65535&P|O<<16,P=65535&(T=X),O=T>>>16,A=65535&(C=z),E=C>>>16,C=t[7],O+=(T=n[7])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[7]=z=65535&A|E<<16,n[7]=X=65535&P|O<<16,W+=128,r-=128}return r}function Z(t,n,e){var r,o=new Int32Array(8),i=new Int32Array(8),s=new Uint8Array(256),a=e;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,V(o,i,n,e),e%=128,r=0;r=0;--o)$(t,n,r=e[o/8|0]>>(7&o)&1),Q(n,t),Q(t,t),$(t,n,r)}function et(t,e){var r=[n(),n(),n(),n()];x(r[0],f),x(r[1],l),x(r[2],a),z(r[3],f,l),nt(t,r,e)}function rt(t,e,o){var i,s=new Uint8Array(64),a=[n(),n(),n(),n()];for(o||r(e,32),Z(s,e,32),s[0]&=248,s[31]&=127,s[31]|=64,et(a,s),tt(t,a),i=0;i<32;i++)e[i+32]=t[i];return 0}var ot=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function it(t,n){var e,r,o,i;for(r=63;r>=32;--r){for(e=0,o=r-32,i=r-12;o>4)*ot[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*ot[o];for(r=0;r<32;r++)n[r+1]+=n[r]>>8,t[r]=255&n[r]}function st(t){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=t[n];for(n=0;n<64;n++)t[n]=0;it(t,e)}function at(t,e,r,o){var i,s,a=new Uint8Array(64),c=new Uint8Array(64),u=new Uint8Array(64),h=new Float64Array(64),f=[n(),n(),n(),n()];Z(a,o,32),a[0]&=248,a[31]&=127,a[31]|=64;var l=r+64;for(i=0;i>7&&D(t[0],s,t[0]),z(t[3],t[0],t[1]),0)}(l,o))return-1;for(i=0;i=0},t.sign.keyPair=function(){var t=new Uint8Array(32),n=new Uint8Array(64);return rt(t,n),{publicKey:t,secretKey:n}},t.sign.keyPair.fromSecretKey=function(t){if(ht(t),64!==t.length)throw new Error("bad secret key size");for(var n=new Uint8Array(32),e=0;e{t.console&&t.console.log&&t.console.log(e)}}debug(...t){this.log(this.globalLog,t)}warn(...t){this.log(this.globalLogWarn,t)}error(...t){this.log(this.globalLogError,t)}globalLogWarn(e){t.console&&t.console.warn?t.console.warn(e):this.globalLog(e)}globalLogError(e){t.console&&t.console.error?t.console.error(e):this.globalLogWarn(e)}log(t,...e){var n=r.m.apply(this,arguments);if(i.a.log)i.a.log(n);else if(i.a.logToConsole){t.bind(this)(n)}}}}).call(this,n(6))},function(t,e,n){"use strict";var r=n(4),i={now:()=>Date.now?Date.now():(new Date).valueOf(),defer:t=>new r.a(0,t),method(t,...e){var n=Array.prototype.slice.call(arguments,1);return function(e){return e[t].apply(e,n.concat(arguments))}}};e.a=i},function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return s}));var r=n(0),i=n(12);class s{constructor(t){this.callbacks=new i.a,this.global_callbacks=[],this.failThrough=t}bind(t,e,n){return this.callbacks.add(t,e,n),this}bind_global(t){return this.global_callbacks.push(t),this}unbind(t,e,n){return this.callbacks.remove(t,e,n),this}unbind_global(t){return t?(this.global_callbacks=r.g(this.global_callbacks||[],e=>e!==t),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(e,n,r){for(var i=0;i0)for(i=0;i{this.onError(t),this.changeState("closed")}),!1}return this.bindListeners(),l.a.debug("Connecting",{transport:this.name,url:t}),this.changeState("connecting"),!0}close(){return!!this.socket&&(this.socket.close(),!0)}send(t){return"open"===this.state&&(c.a.defer(()=>{this.socket&&this.socket.send(t)}),!0)}ping(){"open"===this.state&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(t){this.emit("error",{type:"WebSocketError",error:t}),this.timeline.error(this.buildTimelineMessage({error:t.toString()}))}onClose(t){t?this.changeState("closed",{code:t.code,reason:t.reason,wasClean:t.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(t){this.emit("message",t)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=t=>{this.onError(t)},this.socket.onclose=t=>{this.onClose(t)},this.socket.onmessage=t=>{this.onMessage(t)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(t,e){this.state=t,this.timeline.info(this.buildTimelineMessage({state:t,params:e})),this.emit(t,e)}buildTimelineMessage(t){return r.f({cid:this.id},t)}}class f{constructor(t){this.hooks=t}isSupported(t){return this.hooks.isSupported(t)}createConnection(t,e,n,r){return new d(this.hooks,t,e,n,r)}}var p=new f({urls:a,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return Boolean(zt.getWebSocketAPI())},isSupported:function(){return Boolean(zt.getWebSocketAPI())},getSocket:function(t){return zt.createWebSocket(t)}}),g={urls:h,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},b=r.f({getSocket:function(t){return zt.HTTPFactory.createStreamingSocket(t)}},g),v=r.f({getSocket:function(t){return zt.HTTPFactory.createPollingSocket(t)}},g),y={isSupported:function(){return zt.isXHRSupported()}},m={ws:p,xhr_streaming:new f(r.f({},b,y)),xhr_polling:new f(r.f({},v,y))};class w{constructor(t,e,n){this.manager=t,this.transport=e,this.minPingDelay=n.minPingDelay,this.maxPingDelay=n.maxPingDelay,this.pingDelay=void 0}createConnection(t,e,n,i){i=r.f({},i,{activityTimeout:this.pingDelay});var s=this.transport.createConnection(t,e,n,i),o=null,a=function(){s.unbind("open",a),s.bind("closed",h),o=c.a.now()},h=t=>{if(s.unbind("closed",h),1002===t.code||1003===t.code)this.manager.reportDeath();else if(!t.wasClean&&o){var e=c.a.now()-o;e<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(e/2,this.minPingDelay))}};return s.bind("open",a),s}isSupported(t){return this.manager.isAlive()&&this.transport.isSupported(t)}}const _={decodeMessage:function(t){try{var e=JSON.parse(t.data),n=e.data;if("string"==typeof n)try{n=JSON.parse(e.data)}catch(t){}var r={event:e.event,channel:e.channel,data:n};return e.user_id&&(r.user_id=e.user_id),r}catch(e){throw{type:"MessageParseError",error:e,data:t.data}}},encodeMessage:function(t){return JSON.stringify(t)},processHandshake:function(t){var e=_.decodeMessage(t);if("pusher:connection_established"===e.event){if(!e.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:e.data.socket_id,activityTimeout:1e3*e.data.activity_timeout}}if("pusher:error"===e.event)return{action:this.getCloseAction(e.data),error:this.getCloseError(e.data)};throw"Invalid handshake"},getCloseAction:function(t){return t.code<4e3?t.code>=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}};var S=_;class k extends u.a{constructor(t,e){super(),this.id=t,this.transport=e,this.activityTimeout=e.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(t){return this.transport.send(t)}send_event(t,e,n){var r={event:t,data:e};return n&&(r.channel=n),l.a.debug("Event sent",r),this.send(S.encodeMessage(r))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var t={message:t=>{var e;try{e=S.decodeMessage(t)}catch(e){this.emit("error",{type:"MessageParseError",error:e,data:t.data})}if(void 0!==e){switch(l.a.debug("Event recd",e),e.event){case"pusher:error":this.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong")}this.emit("message",e)}},activity:()=>{this.emit("activity")},error:t=>{this.emit("error",t)},closed:t=>{e(),t&&t.code&&this.handleCloseEvent(t),this.transport=null,this.emit("closed")}},e=()=>{r.k(t,(t,e)=>{this.transport.unbind(e,t)})};r.k(t,(t,e)=>{this.transport.bind(e,t)})}handleCloseEvent(t){var e=S.getCloseAction(t),n=S.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})}}class C{constructor(t,e){this.transport=t,this.callback=e,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=t=>{var e;this.unbindListeners();try{e=S.processHandshake(t)}catch(t){return this.finish("error",{error:t}),void this.transport.close()}"connected"===e.action?this.finish("connected",{connection:new k(e.id,this.transport),activityTimeout:e.activityTimeout}):(this.finish(e.action,{error:e.error}),this.transport.close())},this.onClosed=t=>{this.unbindListeners();var e=S.getCloseAction(t)||"backoff",n=S.getCloseError(t);this.finish(e,{error:n})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(t,e){this.callback(r.f({transport:this.transport,action:t},e))}}class T{constructor(t,e){this.timeline=t,this.options=e||{}}send(t,e){this.timeline.isEmpty()||this.timeline.send(zt.TimelineTransport.getAgent(this,t),e)}}class E extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class A extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}Error;class P extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class x extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class O extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class L extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class U extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class R extends Error{constructor(t,e){super(e),this.status=t,Object.setPrototypeOf(this,new.target.prototype)}}const M={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}};var I=function(t){const e=M.urls[t];if(!e)return"";let n;return e.fullUrl?n=e.fullUrl:e.path&&(n=M.baseUrl+e.path),n?"See: "+n:""};class N extends u.a{constructor(t,e){super((function(e,n){l.a.debug("No callbacks on "+t+" for "+e)})),this.name=t,this.pusher=e,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(t,e){return e(null,{auth:""})}trigger(t,e){if(0!==t.indexOf("client-"))throw new E("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=I("triggeringClientEvents");l.a.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)}handleSubscriptionCountEvent(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(t,e)=>{t?(this.subscriptionPending=!1,l.a.error(t.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:t.message},t instanceof R?{status:t.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class j extends N{authorize(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)}}class D{constructor(){this.reset()}get(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null}each(t){r.k(this.members,(e,n)=>{t(this.get(n))})}setMyID(t){this.myID=t}onSubscription(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)}addMember(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)}removeMember(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var z=function(t,e,n,r){return new(n||(n=Promise))((function(i,s){function o(t){try{h(r.next(t))}catch(t){s(t)}}function a(t){try{h(r.throw(t))}catch(t){s(t)}}function h(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}h((r=r.apply(t,e||[])).next())}))};class H extends j{constructor(t,e){super(t,e),this.members=new D}authorize(t,e){super.authorize(t,(t,n)=>z(this,void 0,void 0,(function*(){if(!t)if(null!=(n=n).channel_data){var r=JSON.parse(n.channel_data);this.members.setMyID(r.user_id)}else{if(yield this.pusher.user.signinDonePromise,null==this.pusher.user.user_data){let t=I("authorizationEndpoint");return l.a.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${t}, or the user should be signed in.`),void e("Invalid auth response")}this.members.setMyID(this.pusher.user.user_data.id)}e(t,n)})))}handleEvent(t){var e=t.event;if(0===e.indexOf("pusher_internal:"))this.handleInternalEvent(t);else{var n=t.data,r={};t.user_id&&(r.user_id=t.user_id),this.emit(e,n,r)}}handleInternalEvent(t){var e=t.event,n=t.data;switch(e){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(t);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(t);break;case"pusher_internal:member_added":var r=this.members.addMember(n);this.emit("pusher:member_added",r);break;case"pusher_internal:member_removed":var i=this.members.removeMember(n);i&&this.emit("pusher:member_removed",i)}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(t.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var B=n(13),F=n(8);class q extends j{constructor(t,e,n){super(t,e),this.key=null,this.nacl=n}authorize(t,e){super.authorize(t,(t,n)=>{if(t)return void e(t,n);let r=n.shared_secret;r?(this.key=Object(F.decode)(r),delete n.shared_secret,e(null,n)):e(new Error("No shared_secret key in auth payload for encrypted channel: "+this.name),null)})}trigger(t,e){throw new O("Client events are not currently supported for encrypted channels")}handleEvent(t){var e=t.event,n=t.data;0!==e.indexOf("pusher_internal:")&&0!==e.indexOf("pusher:")?this.handleEncryptedEvent(e,n):super.handleEvent(t)}handleEncryptedEvent(t,e){if(!this.key)return void l.a.debug("Received encrypted event before key has been retrieved from the authEndpoint");if(!e.ciphertext||!e.nonce)return void l.a.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+e);let n=Object(F.decode)(e.ciphertext);if(n.length{e?l.a.error(`Failed to make a request to the authEndpoint: ${s}. Unable to fetch new key, so dropping encrypted event`):(i=this.nacl.secretbox.open(n,r,this.key),null!==i?this.emit(t,this.getDataToEmit(i)):l.a.error("Failed to decrypt event with new key. Dropping encrypted event"))});this.emit(t,this.getDataToEmit(i))}getDataToEmit(t){let e=Object(B.decode)(t);try{return JSON.parse(e)}catch(t){return e}}}var Y=n(4);class K extends u.a{constructor(t,e){super(),this.state="initialized",this.connection=null,this.key=t,this.options=e,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var n=zt.getNetwork();n.bind("online",()=>{this.timeline.info({netinfo:"online"}),"connecting"!==this.state&&"unavailable"!==this.state||this.retryIn(0)}),n.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){this.connection||this.runner||(this.strategy.isSupported()?(this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()):this.updateState("failed"))}send(t){return!!this.connection&&this.connection.send(t)}send_event(t,e,n){return!!this.connection&&this.connection.send_event(t,e,n)}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var t=(e,n)=>{e?this.runner=this.strategy.connect(0,t):"error"===n.action?(this.emit("error",{type:"HandshakeError",error:n.error}),this.timeline.error({handshakeError:n.error})):(this.abortConnecting(),this.handshakeCallbacks[n.action](n))};this.runner=this.strategy.connect(0,t)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection)&&this.abandonConnection().close()}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(t){this.timeline.info({action:"retry",delay:t}),t>0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new Y.a(t||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new Y.a(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new Y.a(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new Y.a(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(t){return r.f({},t,{message:t=>{this.resetActivityCheck(),this.emit("message",t)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:t=>{this.emit("error",t)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(t){return r.f({},t,{connected:t=>{this.activityTimeout=Math.min(this.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(t.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let t=t=>e=>{e.error&&this.emit("error",{type:"WebSocketError",error:e.error}),t(e)};return{tls_only:t(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:t(()=>{this.disconnect()}),backoff:t(()=>{this.retryIn(1e3)}),retry:t(()=>{this.retryIn(0)})}}setConnection(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()}abandonConnection(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}}updateState(t,e){var n=this.state;if(this.state=t,n!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+e.socket_id),l.a.debug("State changed",n+" -> "+r),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}}shouldRetry(){return"connecting"===this.state||"connected"===this.state}}class ${constructor(){this.channels={}}add(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return J.createEncryptedChannel(t,e,e.config.nacl);let n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",r=I("encryptedChannelSupport");throw new O(`${n}. ${r}`)}if(0===t.indexOf("private-"))return J.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return J.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new A('Cannot create a channel with name "'+t+'".');return J.createChannel(t,e)}(t,e)),this.channels[t]}all(){return r.n(this.channels)}find(t){return this.channels[t]}remove(t){var e=this.channels[t];return delete this.channels[t],e}disconnect(){r.k(this.channels,(function(t){t.disconnect()}))}}var J={createChannels:()=>new $,createConnectionManager:(t,e)=>new K(t,e),createChannel:(t,e)=>new N(t,e),createPrivateChannel:(t,e)=>new j(t,e),createPresenceChannel:(t,e)=>new H(t,e),createEncryptedChannel:(t,e,n)=>new q(t,e,n),createTimelineSender:(t,e)=>new T(t,e),createHandshake:(t,e)=>new C(t,e),createAssistantToTheTransportManager:(t,e,n)=>new w(t,e,n)};class X{constructor(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}getAssistant(t){return J.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class W{constructor(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}isSupported(){return r.b(this.strategies,c.a.method("isSupported"))}connect(t,e){var n=this.strategies,r=0,i=this.timeout,s=null,o=(a,h)=>{h?e(null,h):(r+=1,this.loop&&(r%=n.length),r0&&(i=new Y.a(n.timeout,(function(){s.abort(),r(!0)}))),s=t.connect(e,(function(t,e){t&&i&&i.isRunning()&&!n.failFast||(i&&i.ensureAborted(),r(t,e))})),{abort:function(){i&&i.ensureAborted(),s.abort()},forceMinPriority:function(t){s.forceMinPriority(t)}}}}class G{constructor(t){this.strategies=t}isSupported(){return r.b(this.strategies,c.a.method("isSupported"))}connect(t,e){return function(t,e,n){var i=r.j(t,(function(t,r,i,s){return t.connect(e,n(r,s))}));return{abort:function(){r.c(i,V)},forceMinPriority:function(t){r.c(i,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(i,s){n[t].error=i,i?function(t){return r.a(t,(function(t){return Boolean(t.error)}))}(n)&&e(!0):(r.c(n,(function(t){t.forceMinPriority(s.transport.priority)})),e(null,s))}}))}}function V(t){t.error||t.aborted||(t.abort(),t.aborted=!0)}class Z{constructor(t,e,n){this.strategy=t,this.transports=e,this.ttl=n.ttl||18e5,this.usingTLS=n.useTLS,this.timeline=n.timeline}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.usingTLS,i=function(t){var e=zt.getLocalStorage();if(e)try{var n=e[Q(t)];if(n)return JSON.parse(n)}catch(e){tt(t)}return null}(n),s=[this.strategy];if(i&&i.timestamp+this.ttl>=c.a.now()){var o=this.transports[i.transport];o&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),s.push(new W([o],{timeout:2*i.latency+1e3,failFast:!0})))}var a=c.a.now(),h=s.pop().connect(t,(function i(o,u){o?(tt(n),s.length>0?(a=c.a.now(),h=s.pop().connect(t,i)):e(o)):(!function(t,e,n){var i=zt.getLocalStorage();if(i)try{i[Q(t)]=r.l({timestamp:c.a.now(),transport:e,latency:n})}catch(t){}}(n,u.transport.name,c.a.now()-a),e(null,u))}));return{abort:function(){h.abort()},forceMinPriority:function(e){t=e,h&&h.forceMinPriority(e)}}}}function Q(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function tt(t){var e=zt.getLocalStorage();if(e)try{delete e[Q(t)]}catch(t){}}class et{constructor(t,{delay:e}){this.strategy=t,this.options={delay:e}}isSupported(){return this.strategy.isSupported()}connect(t,e){var n,r=this.strategy,i=new Y.a(this.options.delay,(function(){n=r.connect(t,e)}));return{abort:function(){i.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}}}class nt{constructor(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}isSupported(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()}connect(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)}}class rt{constructor(t){this.strategy=t}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.strategy.connect(t,(function(t,r){r&&n.abort(),e(t,r)}));return n}}function it(t){return function(){return t.isSupported()}}var st=function(t,e,n){var i={};function s(e,r,s,o,a){var h=n(t,e,r,s,o,a);return i[e]=h,h}var o,a=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),h=r.f({},a,{useTLS:!0}),c=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),u={loop:!0,timeout:15e3,timeoutLimit:6e4},l=new X({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),d=new X({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),f=s("ws","ws",3,a,l),p=s("wss","ws",3,h,l),g=s("xhr_streaming","xhr_streaming",1,c,d),b=s("xhr_polling","xhr_polling",1,c),v=new W([f],u),y=new W([p],u),m=new W([g],u),w=new W([b],u),_=new W([new nt(it(m),new G([m,new et(w,{delay:4e3})]),w)],u);return o=e.useTLS?new G([v,new et(_,{delay:2e3})]):new G([v,new et(y,{delay:2e3}),new et(_,{delay:5e3})]),new Z(new rt(new nt(it(f),o,_)),i,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})};class ot extends u.a{constructor(t,e,n){super(),this.hooks=t,this.method=e,this.url=n}start(t){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},zt.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)}close(){this.unloader&&(zt.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")}advanceBuffer(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null}isBufferTooLong(t){return this.position===t.length&&t.length>262144}}var at;!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(at||(at={}));var ht=at,ct=1;function ut(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+ct++}function lt(t){return zt.randomInt(t)}var dt=class{constructor(t,e){this.hooks=t,this.session=lt(1e3)+"/"+function(t){for(var e=[],n=0;n{this.onChunk(t)}),this.stream.bind("finished",t=>{this.hooks.onFinished(this,t)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(t){c.a.defer(()=>{this.onError(t),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}},ft={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr_streaming"+t.queryString},onHeartbeat:function(t){t.sendRaw("[]")},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){t.onClose(1006,"Connection interrupted ("+e+")",!1)}},pt={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr"+t.queryString},onHeartbeat:function(){},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){200===e?t.reconnect():t.onClose(1006,"Connection interrupted ("+e+")",!1)}},gt={getRequest:function(t){var e=new(zt.getXHRAPI());return e.onreadystatechange=e.onprogress=function(){switch(e.readyState){case 3:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},bt={getDefaultStrategy:st,Transports:m,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket(t){return this.createSocket(ft,t)},createPollingSocket(t){return this.createSocket(pt,t)},createSocket:(t,e)=>new dt(t,e),createXHR(t,e){return this.createRequest(gt,t,e)},createRequest:(t,e,n)=>new ot(t,e,n)},setup(t){t.ready()},getLocalStorage(){},getClientFeatures:()=>r.i(r.h({ws:m.ws},(function(t){return t.isSupported({})}))),getProtocol:()=>"http:",isXHRSupported:()=>!0,createSocketRequest(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);throw"Cross-origin HTTP requests are not supported"},createXHR(){return new(this.getXHRAPI())},createWebSocket(t){return new(this.getWebSocketAPI())(t)},addUnloadListener(t){},removeUnloadListener(t){}},vt=n(10),yt=n.n(vt);function mt(t){return"none"!==t.type.toLowerCase()}class wt extends u.a{constructor(){super(),this.online=!0,yt.a.fetch().then(t=>{this.online=mt(t)}),yt.a.addEventListener(t=>{var e=mt(t);this.online!==e&&(this.online=e,this.online?this.emit("online"):this.emit("offline"))})}isOnline(){return this.online}}var _t,St=new wt;!function(t){t.UserAuthentication="user-authentication",t.ChannelAuthorization="channel-authorization"}(_t||(_t={}));var kt=function(t,e,n,r,i){const s=zt.createXHR();for(var o in s.open("POST",n.endpoint,!0),s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.headers)s.setRequestHeader(o,n.headers[o]);if(null!=n.headersProvider){let t=n.headersProvider();for(var o in t)s.setRequestHeader(o,t[o])}return s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status){let t,e=!1;try{t=JSON.parse(s.responseText),e=!0}catch(t){i(new R(200,`JSON returned from ${r.toString()} endpoint was invalid, yet status code was 200. Data was: ${s.responseText}`),null)}e&&i(null,t)}else{let t="";switch(r){case _t.UserAuthentication:t=I("authenticationEndpoint");break;case _t.ChannelAuthorization:t="Clients must be authorized to join private or presence channels. "+I("authorizationEndpoint")}i(new R(s.status,`Unable to retrieve auth string from ${r.toString()} endpoint - received status: ${s.status} from ${n.endpoint}. ${t}`),null)}},s.send(e),s},Ct={name:"xhr",getAgent:function(t,e){return function(n,i){var s="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path;s+="/2?"+r.e(n);var o=zt.createXHR();o.open("GET",s,!0),o.onreadystatechange=function(){if(4===o.readyState){let{status:n,responseText:r}=o;if(200!==n)return void l.a.debug(`TimelineSender Error: received ${n} from stats.pusher.com`);try{var{host:e}=JSON.parse(r)}catch(t){l.a.debug("TimelineSenderError: invalid response "+r)}e&&(t.host=e)}},o.send()}}};const{getDefaultStrategy:Tt,Transports:Et,setup:At,getProtocol:Pt,isXHRSupported:xt,getLocalStorage:Ot,createXHR:Lt,createWebSocket:Ut,addUnloadListener:Rt,removeUnloadListener:Mt,transportConnectionInitializer:It,createSocketRequest:Nt,HTTPFactory:jt}=bt;var Dt,zt={getDefaultStrategy:Tt,Transports:Et,setup:At,getProtocol:Pt,isXHRSupported:xt,getLocalStorage:Ot,createXHR:Lt,createWebSocket:Ut,addUnloadListener:Rt,removeUnloadListener:Mt,transportConnectionInitializer:It,createSocketRequest:Nt,HTTPFactory:jt,TimelineTransport:Ct,getAuthorizers:()=>({ajax:kt}),getWebSocketAPI:()=>WebSocket,getXHRAPI:()=>XMLHttpRequest,getNetwork:()=>St,randomInt:t=>Math.floor(Math.random()*t)};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(Dt||(Dt={}));var Ht=Dt;class Bt{constructor(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}log(t,e){t<=this.options.level&&(this.events.push(r.f({},e,{timestamp:c.a.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(t){this.log(Ht.ERROR,t)}info(t){this.log(Ht.INFO,t)}debug(t){this.log(Ht.DEBUG,t)}isEmpty(){return 0===this.events.length}send(t,e){var n=r.f({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(n,(t,n)=>{t||this.sent++,e&&e(t,n)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class Ft{constructor(t,e,n,r){this.name=t,this.priority=e,this.transport=n,this.options=r||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(t,e){if(!this.isSupported())return qt(new U,e);if(this.priority{n||(u(),s?s.close():i.close())},forceMinPriority:t=>{n||this.priority{if(void 0===zt.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);zt.getAuthorizers()[t.transport](zt,r,t,_t.UserAuthentication,n)}};var Wt=t=>{if(void 0===zt.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in n+="&channel_name="+encodeURIComponent(t.channelName),e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);zt.getAuthorizers()[t.transport](zt,r,t,_t.ChannelAuthorization,n)}};function Gt(t){return t.httpHost?t.httpHost:t.cluster?`sockjs-${t.cluster}.pusher.com`:i.httpHost}function Vt(t){return t.wsHost?t.wsHost:`ws-${t.cluster}.pusher.com`}function Zt(t){return"https:"===zt.getProtocol()||!1!==t.forceTLS}function Qt(t){return"enableStats"in t?t.enableStats:"disableStats"in t&&!t.disableStats}function te(t){const e=Object.assign(Object.assign({},i.userAuthentication),t.userAuthentication);return"customHandler"in e&&null!=e.customHandler?e.customHandler:Xt(e)}function ee(t,e){const n=function(t,e){let n;return"channelAuthorization"in t?n=Object.assign(Object.assign({},i.channelAuthorization),t.channelAuthorization):(n={transport:t.authTransport||i.authTransport,endpoint:t.authEndpoint||i.authEndpoint},"auth"in t&&("params"in t.auth&&(n.params=t.auth.params),"headers"in t.auth&&(n.headers=t.auth.headers)),"authorizer"in t&&(n.customHandler=((t,e,n)=>{const r={authTransport:e.transport,authEndpoint:e.endpoint,auth:{params:e.params,headers:e.headers}};return(e,i)=>{const s=t.channel(e.channelName);n(s,r).authorize(e.socketId,i)}})(e,n,t.authorizer))),n}(t,e);return"customHandler"in n&&null!=n.customHandler?n.customHandler:Wt(n)}class ne extends u.a{constructor(t){super((function(t,e){l.a.debug("No callbacks on watchlist events for "+t)})),this.pusher=t,this.bindWatchlistInternalEvent()}handleEvent(t){t.data.events.forEach(t=>{this.emit(t.name,t)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",t=>{"pusher_internal:watchlist_events"===t.event&&this.handleEvent(t)})}}var re=function(){let t,e;return{promise:new Promise((n,r)=>{t=n,e=r}),resolve:t,reject:e}};class ie extends u.a{constructor(t){super((function(t,e){l.a.debug("No callbacks on user for "+t)})),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(t,e)=>{if(t)return l.a.warn("Error during signin: "+t),void this._cleanup();this.pusher.send_event("pusher:signin",{auth:e.auth,user_data:e.user_data})},this.pusher=t,this.pusher.connection.bind("state_change",({previous:t,current:e})=>{"connected"!==t&&"connected"===e&&this._signin(),"connected"===t&&"connected"!==e&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new ne(t),this.pusher.connection.bind("message",t=>{"pusher:signin_success"===t.event&&this._onSigninSuccess(t.data),this.serverToUserChannel&&this.serverToUserChannel.name===t.channel&&this.serverToUserChannel.handleEvent(t)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),"connected"===this.pusher.connection.state&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(t){try{this.user_data=JSON.parse(t.user_data)}catch(e){return l.a.error("Failed parsing user data after signin: "+t.user_data),void this._cleanup()}if("string"!=typeof this.user_data.id||""===this.user_data.id)return l.a.error("user_data doesn't contain an id. user_data: "+this.user_data),void this._cleanup();this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){this.serverToUserChannel=new N("#server-to-user-"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global((t,e)=>{0!==t.indexOf("pusher_internal:")&&0!==t.indexOf("pusher:")&&this.emit(t,e)}),(t=>{t.subscriptionPending&&t.subscriptionCancelled?t.reinstateSubscription():t.subscriptionPending||"connected"!==this.pusher.connection.state||t.subscribe()})(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested)return;if(this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:t,resolve:e,reject:n}=re();t.done=!1;const r=()=>{t.done=!0};t.then(r).catch(r),this.signinDonePromise=t,this._signinDoneResolve=e}}class se{static ready(){se.isReady=!0;for(var t=0,e=se.instances.length;tzt.getDefaultStrategy(this.config,t,Kt),timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:Boolean(this.config.useTLS)}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",t=>{var e=0===t.event.indexOf("pusher_internal:");if(t.channel){var n=this.channel(t.channel);n&&n.handleEvent(t)}e||this.global_emitter.emit(t.event,t.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",t=>{l.a.warn(t)}),se.instances.push(this),this.timeline.info({instances:se.instances.length}),this.user=new ie(this),se.isReady&&this.connect()}channel(t){return this.channels.find(t)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),e=this.timelineSender;this.timelineSenderTimer=new Y.b(6e4,(function(){e.send(t)}))}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(t,e,n){return this.global_emitter.bind(t,e,n),this}unbind(t,e,n){return this.global_emitter.unbind(t,e,n),this}bind_global(t){return this.global_emitter.bind_global(t),this}unbind_global(t){return this.global_emitter.unbind_global(t),this}unbind_all(t){return this.global_emitter.unbind_all(),this}subscribeAll(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)}subscribe(t){var e=this.channels.add(t,this);return e.subscriptionPending&&e.subscriptionCancelled?e.reinstateSubscription():e.subscriptionPending||"connected"!==this.connection.state||e.subscribe(),e}unsubscribe(t){var e=this.channels.find(t);e&&e.subscriptionPending?e.cancelSubscription():(e=this.channels.remove(t))&&e.subscribed&&e.unsubscribe()}send_event(t,e,n){return this.connection.send_event(t,e,n)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}se.instances=[],se.isReady=!1,se.logToConsole=!1,se.Runtime=zt,se.ScriptReceivers=zt.ScriptReceivers,se.DependenciesReceivers=zt.DependenciesReceivers,se.auth_callbacks=zt.auth_callbacks;e.a=se;zt.setup(se)},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(1);function i(t){if(null==t)throw"You must pass an options object";if(null==t.cluster)throw"Options object must provide a cluster";"disableStats"in t&&r.a.warn("The disableStats option is deprecated in favor of enableStats")}},function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t){void 0===t&&(t="="),this._paddingCharacter=t}return t.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(8*t+5)/6|0},t.prototype.encode=function(t){for(var e="",n=0;n>>18&63),e+=this._encodeByte(r>>>12&63),e+=this._encodeByte(r>>>6&63),e+=this._encodeByte(r>>>0&63)}var i=t.length-n;if(i>0){r=t[n]<<16|(2===i?t[n+1]<<8:0);e+=this._encodeByte(r>>>18&63),e+=this._encodeByte(r>>>12&63),e+=2===i?this._encodeByte(r>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,r=new Uint8Array(this.maxDecodedLength(n)),i=0,s=0,o=0,a=0,h=0,c=0,u=0;s>>4,r[i++]=h<<4|c>>>2,r[i++]=c<<6|u,o|=256&a,o|=256&h,o|=256&c,o|=256&u;if(s>>4,o|=256&a,o|=256&h),s>>2,o|=256&c),s>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=s;var o=new s;e.encode=function(t){return o.encode(t)},e.decode=function(t){return o.decode(t)};var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(s);e.URLSafeCoder=a;var h=new a;e.encodeURLSafe=function(t){return h.encode(t)},e.decodeURLSafe=function(t){return h.decode(t)},e.encodedLength=function(t){return o.encodedLength(t)},e.maxDecodedLength=function(t){return o.maxDecodedLength(t)},e.decodedLength=function(t){return o.decodedLength(t)}},function(t,e,n){"use strict";e.a=class{constructor(t,e,n,r){this.clear=e,this.timer=t(()=>{this.timer&&(this.timer=r(this.timer))},n)}isRunning(){return null!==this.timer}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}}},function(t,e){t.exports=require("@react-native-community/netinfo")},function(t,e,n){"use strict";(function(t){function r(t){return d(u(t))}n.d(e,"a",(function(){return r}));for(var i=String.fromCharCode,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o={},a=0,h=s.length;a>>6)+i(128|63&e):i(224|e>>>12&15)+i(128|e>>>6&63)+i(128|63&e)},u=function(t){return t.replace(/[^\x00-\x7F]/g,c)},l=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[s.charAt(n>>>18),s.charAt(n>>>12&63),e>=2?"=":s.charAt(n>>>6&63),e>=1?"=":s.charAt(63&n)].join("")},d=t.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,l)}}).call(this,n(6))},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(0);class i{constructor(){this._callbacks={}}get(t){return this._callbacks[s(t)]}add(t,e,n){var r=s(t);this._callbacks[r]=this._callbacks[r]||[],this._callbacks[r].push({fn:e,context:n})}remove(t,e,n){if(t||e||n){var i=t?[s(t)]:r.i(this._callbacks);e||n?this.removeCallback(i,e,n):this.removeAllCallbacks(i)}else this._callbacks={}}removeCallback(t,e,n){r.c(t,(function(t){this._callbacks[t]=r.g(this._callbacks[t]||[],(function(t){return e&&e!==t.fn||n&&n!==t.context})),0===this._callbacks[t].length&&delete this._callbacks[t]}),this)}removeAllCallbacks(t){r.c(t,(function(t){delete this._callbacks[t]}),this)}}function s(t){return"_"+t}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="utf8: invalid source encoding";function i(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(i(t)),n=0,r=0;r>6,e[n++]=128|63&s):s<55296?(e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s):(r++,s=(1023&s)<<10,s|=1023&t.charCodeAt(r),s+=65536,e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s)}return e},e.encodedLength=i,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(r);if(128!=(192&(o=t[++n])))throw new Error(r);i=(31&i)<<6|63&o,s=128}else if(i<240){if(n>=t.length-1)throw new Error(r);var o=t[++n],a=t[++n];if(128!=(192&o)||128!=(192&a))throw new Error(r);i=(15&i)<<12|(63&o)<<6|63&a,s=2048}else{if(!(i<248))throw new Error(r);if(n>=t.length-2)throw new Error(r);o=t[++n],a=t[++n];var h=t[++n];if(128!=(192&o)||128!=(192&a)||128!=(192&h))throw new Error(r);i=(15&i)<<18|(63&o)<<12|(63&a)<<6|63&h,s=65536}if(i=55296&&i<=57343)throw new Error(r);if(i>=65536){if(i>1114111)throw new Error(r);i-=65536,e.push(String.fromCharCode(55296|i>>10)),i=56320|1023&i}}e.push(String.fromCharCode(i))}return e.join("")}},function(t,e,n){!function(t){"use strict";var e=function(t){var e,n=new Float64Array(16);if(t)for(e=0;e>24&255,t[e+1]=n>>16&255,t[e+2]=n>>8&255,t[e+3]=255&n,t[e+4]=r>>24&255,t[e+5]=r>>16&255,t[e+6]=r>>8&255,t[e+7]=255&r}function g(t,e,n,r,i){var s,o=0;for(s=0;s>>8)-1}function b(t,e,n,r){return g(t,e,n,r,16)}function v(t,e,n,r){return g(t,e,n,r,32)}function y(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,c=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,f=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,b=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,v=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=s,S=o,k=a,C=h,T=c,E=u,A=l,P=d,x=f,O=p,L=g,U=b,R=v,M=y,I=m,N=w,j=0;j<20;j+=2)_^=(i=(R^=(i=(x^=(i=(T^=(i=_+R|0)<<7|i>>>25)+_|0)<<9|i>>>23)+T|0)<<13|i>>>19)+x|0)<<18|i>>>14,E^=(i=(S^=(i=(M^=(i=(O^=(i=E+S|0)<<7|i>>>25)+E|0)<<9|i>>>23)+O|0)<<13|i>>>19)+M|0)<<18|i>>>14,L^=(i=(A^=(i=(k^=(i=(I^=(i=L+A|0)<<7|i>>>25)+L|0)<<9|i>>>23)+I|0)<<13|i>>>19)+k|0)<<18|i>>>14,N^=(i=(U^=(i=(P^=(i=(C^=(i=N+U|0)<<7|i>>>25)+N|0)<<9|i>>>23)+C|0)<<13|i>>>19)+P|0)<<18|i>>>14,_^=(i=(C^=(i=(k^=(i=(S^=(i=_+C|0)<<7|i>>>25)+_|0)<<9|i>>>23)+S|0)<<13|i>>>19)+k|0)<<18|i>>>14,E^=(i=(T^=(i=(P^=(i=(A^=(i=E+T|0)<<7|i>>>25)+E|0)<<9|i>>>23)+A|0)<<13|i>>>19)+P|0)<<18|i>>>14,L^=(i=(O^=(i=(x^=(i=(U^=(i=L+O|0)<<7|i>>>25)+L|0)<<9|i>>>23)+U|0)<<13|i>>>19)+x|0)<<18|i>>>14,N^=(i=(I^=(i=(M^=(i=(R^=(i=N+I|0)<<7|i>>>25)+N|0)<<9|i>>>23)+R|0)<<13|i>>>19)+M|0)<<18|i>>>14;_=_+s|0,S=S+o|0,k=k+a|0,C=C+h|0,T=T+c|0,E=E+u|0,A=A+l|0,P=P+d|0,x=x+f|0,O=O+p|0,L=L+g|0,U=U+b|0,R=R+v|0,M=M+y|0,I=I+m|0,N=N+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=E>>>0&255,t[21]=E>>>8&255,t[22]=E>>>16&255,t[23]=E>>>24&255,t[24]=A>>>0&255,t[25]=A>>>8&255,t[26]=A>>>16&255,t[27]=A>>>24&255,t[28]=P>>>0&255,t[29]=P>>>8&255,t[30]=P>>>16&255,t[31]=P>>>24&255,t[32]=x>>>0&255,t[33]=x>>>8&255,t[34]=x>>>16&255,t[35]=x>>>24&255,t[36]=O>>>0&255,t[37]=O>>>8&255,t[38]=O>>>16&255,t[39]=O>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=U>>>0&255,t[45]=U>>>8&255,t[46]=U>>>16&255,t[47]=U>>>24&255,t[48]=R>>>0&255,t[49]=R>>>8&255,t[50]=R>>>16&255,t[51]=R>>>24&255,t[52]=M>>>0&255,t[53]=M>>>8&255,t[54]=M>>>16&255,t[55]=M>>>24&255,t[56]=I>>>0&255,t[57]=I>>>8&255,t[58]=I>>>16&255,t[59]=I>>>24&255,t[60]=N>>>0&255,t[61]=N>>>8&255,t[62]=N>>>16&255,t[63]=N>>>24&255}(t,e,n,r)}function m(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,c=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,f=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,b=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,v=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=0;_<20;_+=2)s^=(i=(v^=(i=(f^=(i=(c^=(i=s+v|0)<<7|i>>>25)+s|0)<<9|i>>>23)+c|0)<<13|i>>>19)+f|0)<<18|i>>>14,u^=(i=(o^=(i=(y^=(i=(p^=(i=u+o|0)<<7|i>>>25)+u|0)<<9|i>>>23)+p|0)<<13|i>>>19)+y|0)<<18|i>>>14,g^=(i=(l^=(i=(a^=(i=(m^=(i=g+l|0)<<7|i>>>25)+g|0)<<9|i>>>23)+m|0)<<13|i>>>19)+a|0)<<18|i>>>14,w^=(i=(b^=(i=(d^=(i=(h^=(i=w+b|0)<<7|i>>>25)+w|0)<<9|i>>>23)+h|0)<<13|i>>>19)+d|0)<<18|i>>>14,s^=(i=(h^=(i=(a^=(i=(o^=(i=s+h|0)<<7|i>>>25)+s|0)<<9|i>>>23)+o|0)<<13|i>>>19)+a|0)<<18|i>>>14,u^=(i=(c^=(i=(d^=(i=(l^=(i=u+c|0)<<7|i>>>25)+u|0)<<9|i>>>23)+l|0)<<13|i>>>19)+d|0)<<18|i>>>14,g^=(i=(p^=(i=(f^=(i=(b^=(i=g+p|0)<<7|i>>>25)+g|0)<<9|i>>>23)+b|0)<<13|i>>>19)+f|0)<<18|i>>>14,w^=(i=(m^=(i=(y^=(i=(v^=(i=w+m|0)<<7|i>>>25)+w|0)<<9|i>>>23)+v|0)<<13|i>>>19)+y|0)<<18|i>>>14;t[0]=s>>>0&255,t[1]=s>>>8&255,t[2]=s>>>16&255,t[3]=s>>>24&255,t[4]=u>>>0&255,t[5]=u>>>8&255,t[6]=u>>>16&255,t[7]=u>>>24&255,t[8]=g>>>0&255,t[9]=g>>>8&255,t[10]=g>>>16&255,t[11]=g>>>24&255,t[12]=w>>>0&255,t[13]=w>>>8&255,t[14]=w>>>16&255,t[15]=w>>>24&255,t[16]=l>>>0&255,t[17]=l>>>8&255,t[18]=l>>>16&255,t[19]=l>>>24&255,t[20]=d>>>0&255,t[21]=d>>>8&255,t[22]=d>>>16&255,t[23]=d>>>24&255,t[24]=f>>>0&255,t[25]=f>>>8&255,t[26]=f>>>16&255,t[27]=f>>>24&255,t[28]=p>>>0&255,t[29]=p>>>8&255,t[30]=p>>>16&255,t[31]=p>>>24&255}(t,e,n,r)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function _(t,e,n,r,i,s,o){var a,h,c=new Uint8Array(16),u=new Uint8Array(64);for(h=0;h<16;h++)c[h]=0;for(h=0;h<8;h++)c[h]=s[h];for(;i>=64;){for(y(u,c,o,w),h=0;h<64;h++)t[e+h]=n[r+h]^u[h];for(a=1,h=8;h<16;h++)a=a+(255&c[h])|0,c[h]=255&a,a>>>=8;i-=64,e+=64,r+=64}if(i>0)for(y(u,c,o,w),h=0;h=64;){for(y(h,a,i,w),o=0;o<64;o++)t[e+o]=h[o];for(s=1,o=8;o<16;o++)s=s+(255&a[o])|0,a[o]=255&s,s>>>=8;n-=64,e+=64}if(n>0)for(y(h,a,i,w),o=0;o>>13|n<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(n>>>10|r<<6),i=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|i<<9),s=255&t[8]|(255&t[9])<<8,this.r[4]=255&(i>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(s>>>14|o<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(o>>>11|a<<5),h=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|h<<8),this.r[9]=h>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function E(t,e,n,r,i,s){var o=new T(s);return o.update(n,r,i),o.finish(t,e),0}function A(t,e,n,r,i,s){var o=new Uint8Array(16);return E(o,0,n,r,i,s),b(t,e,o,0)}function P(t,e,n,r,i){var s;if(n<32)return-1;for(C(t,0,e,0,n,r,i),E(t,16,t,32,n-32,t),s=0;s<16;s++)t[s]=0;return 0}function x(t,e,n,r,i){var s,o=new Uint8Array(32);if(n<32)return-1;if(k(o,0,32,r,i),0!==A(e,16,e,32,n-32,o))return-1;for(C(t,0,e,0,n,r,i),s=0;s<32;s++)t[s]=0;return 0}function O(t,e){var n;for(n=0;n<16;n++)t[n]=0|e[n]}function L(t){var e,n,r=1;for(e=0;e<16;e++)n=t[e]+r+65535,r=Math.floor(n/65536),t[e]=n-65536*r;t[0]+=r-1+37*(r-1)}function U(t,e,n){for(var r,i=~(n-1),s=0;s<16;s++)r=i&(t[s]^e[s]),t[s]^=r,e[s]^=r}function R(t,n){var r,i,s,o=e(),a=e();for(r=0;r<16;r++)a[r]=n[r];for(L(a),L(a),L(a),i=0;i<2;i++){for(o[0]=a[0]-65517,r=1;r<15;r++)o[r]=a[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,U(a,o,1-s)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function M(t,e){var n=new Uint8Array(32),r=new Uint8Array(32);return R(n,t),R(r,e),v(n,0,r,0)}function I(t){var e=new Uint8Array(32);return R(e,t),1&e[0]}function N(t,e){var n;for(n=0;n<16;n++)t[n]=e[2*n]+(e[2*n+1]<<8);t[15]&=32767}function j(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]+n[r]}function D(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]-n[r]}function z(t,e,n){var r,i,s=0,o=0,a=0,h=0,c=0,u=0,l=0,d=0,f=0,p=0,g=0,b=0,v=0,y=0,m=0,w=0,_=0,S=0,k=0,C=0,T=0,E=0,A=0,P=0,x=0,O=0,L=0,U=0,R=0,M=0,I=0,N=n[0],j=n[1],D=n[2],z=n[3],H=n[4],B=n[5],F=n[6],q=n[7],Y=n[8],K=n[9],$=n[10],J=n[11],X=n[12],W=n[13],G=n[14],V=n[15];s+=(r=e[0])*N,o+=r*j,a+=r*D,h+=r*z,c+=r*H,u+=r*B,l+=r*F,d+=r*q,f+=r*Y,p+=r*K,g+=r*$,b+=r*J,v+=r*X,y+=r*W,m+=r*G,w+=r*V,o+=(r=e[1])*N,a+=r*j,h+=r*D,c+=r*z,u+=r*H,l+=r*B,d+=r*F,f+=r*q,p+=r*Y,g+=r*K,b+=r*$,v+=r*J,y+=r*X,m+=r*W,w+=r*G,_+=r*V,a+=(r=e[2])*N,h+=r*j,c+=r*D,u+=r*z,l+=r*H,d+=r*B,f+=r*F,p+=r*q,g+=r*Y,b+=r*K,v+=r*$,y+=r*J,m+=r*X,w+=r*W,_+=r*G,S+=r*V,h+=(r=e[3])*N,c+=r*j,u+=r*D,l+=r*z,d+=r*H,f+=r*B,p+=r*F,g+=r*q,b+=r*Y,v+=r*K,y+=r*$,m+=r*J,w+=r*X,_+=r*W,S+=r*G,k+=r*V,c+=(r=e[4])*N,u+=r*j,l+=r*D,d+=r*z,f+=r*H,p+=r*B,g+=r*F,b+=r*q,v+=r*Y,y+=r*K,m+=r*$,w+=r*J,_+=r*X,S+=r*W,k+=r*G,C+=r*V,u+=(r=e[5])*N,l+=r*j,d+=r*D,f+=r*z,p+=r*H,g+=r*B,b+=r*F,v+=r*q,y+=r*Y,m+=r*K,w+=r*$,_+=r*J,S+=r*X,k+=r*W,C+=r*G,T+=r*V,l+=(r=e[6])*N,d+=r*j,f+=r*D,p+=r*z,g+=r*H,b+=r*B,v+=r*F,y+=r*q,m+=r*Y,w+=r*K,_+=r*$,S+=r*J,k+=r*X,C+=r*W,T+=r*G,E+=r*V,d+=(r=e[7])*N,f+=r*j,p+=r*D,g+=r*z,b+=r*H,v+=r*B,y+=r*F,m+=r*q,w+=r*Y,_+=r*K,S+=r*$,k+=r*J,C+=r*X,T+=r*W,E+=r*G,A+=r*V,f+=(r=e[8])*N,p+=r*j,g+=r*D,b+=r*z,v+=r*H,y+=r*B,m+=r*F,w+=r*q,_+=r*Y,S+=r*K,k+=r*$,C+=r*J,T+=r*X,E+=r*W,A+=r*G,P+=r*V,p+=(r=e[9])*N,g+=r*j,b+=r*D,v+=r*z,y+=r*H,m+=r*B,w+=r*F,_+=r*q,S+=r*Y,k+=r*K,C+=r*$,T+=r*J,E+=r*X,A+=r*W,P+=r*G,x+=r*V,g+=(r=e[10])*N,b+=r*j,v+=r*D,y+=r*z,m+=r*H,w+=r*B,_+=r*F,S+=r*q,k+=r*Y,C+=r*K,T+=r*$,E+=r*J,A+=r*X,P+=r*W,x+=r*G,O+=r*V,b+=(r=e[11])*N,v+=r*j,y+=r*D,m+=r*z,w+=r*H,_+=r*B,S+=r*F,k+=r*q,C+=r*Y,T+=r*K,E+=r*$,A+=r*J,P+=r*X,x+=r*W,O+=r*G,L+=r*V,v+=(r=e[12])*N,y+=r*j,m+=r*D,w+=r*z,_+=r*H,S+=r*B,k+=r*F,C+=r*q,T+=r*Y,E+=r*K,A+=r*$,P+=r*J,x+=r*X,O+=r*W,L+=r*G,U+=r*V,y+=(r=e[13])*N,m+=r*j,w+=r*D,_+=r*z,S+=r*H,k+=r*B,C+=r*F,T+=r*q,E+=r*Y,A+=r*K,P+=r*$,x+=r*J,O+=r*X,L+=r*W,U+=r*G,R+=r*V,m+=(r=e[14])*N,w+=r*j,_+=r*D,S+=r*z,k+=r*H,C+=r*B,T+=r*F,E+=r*q,A+=r*Y,P+=r*K,x+=r*$,O+=r*J,L+=r*X,U+=r*W,R+=r*G,M+=r*V,w+=(r=e[15])*N,o+=38*(S+=r*D),a+=38*(k+=r*z),h+=38*(C+=r*H),c+=38*(T+=r*B),u+=38*(E+=r*F),l+=38*(A+=r*q),d+=38*(P+=r*Y),f+=38*(x+=r*K),p+=38*(O+=r*$),g+=38*(L+=r*J),b+=38*(U+=r*X),v+=38*(R+=r*W),y+=38*(M+=r*G),m+=38*(I+=r*V),s=(r=(s+=38*(_+=r*j))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s=(r=(s+=i-1+37*(i-1))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s+=i-1+37*(i-1),t[0]=s,t[1]=o,t[2]=a,t[3]=h,t[4]=c,t[5]=u,t[6]=l,t[7]=d,t[8]=f,t[9]=p,t[10]=g,t[11]=b,t[12]=v,t[13]=y,t[14]=m,t[15]=w}function H(t,e){z(t,e,e)}function B(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=253;r>=0;r--)H(i,i),2!==r&&4!==r&&z(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function F(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=250;r>=0;r--)H(i,i),1!==r&&z(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function q(t,n,r){var i,s,o=new Uint8Array(32),a=new Float64Array(80),c=e(),u=e(),l=e(),d=e(),f=e(),p=e();for(s=0;s<31;s++)o[s]=n[s];for(o[31]=127&n[31]|64,o[0]&=248,N(a,r),s=0;s<16;s++)u[s]=a[s],d[s]=c[s]=l[s]=0;for(c[0]=d[0]=1,s=254;s>=0;--s)U(c,u,i=o[s>>>3]>>>(7&s)&1),U(l,d,i),j(f,c,l),D(c,c,l),j(l,u,d),D(u,u,d),H(d,f),H(p,c),z(c,l,c),z(l,u,f),j(f,c,l),D(c,c,l),H(u,c),D(l,d,p),z(c,l,h),j(c,c,d),z(l,l,c),z(c,d,p),z(d,u,a),H(u,f),U(c,u,i),U(l,d,i);for(s=0;s<16;s++)a[s+16]=c[s],a[s+32]=l[s],a[s+48]=u[s],a[s+64]=d[s];var g=a.subarray(32),b=a.subarray(16);return B(g,g),z(b,b,g),R(t,b),0}function Y(t,e){return q(t,e,s)}function K(t,e){return r(e,32),Y(t,e)}function $(t,e,n){var r=new Uint8Array(32);return q(r,n,e),m(t,i,r,w)}T.prototype.blocks=function(t,e,n){for(var r,i,s,o,a,h,c,u,l,d,f,p,g,b,v,y,m,w,_,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],E=this.h[3],A=this.h[4],P=this.h[5],x=this.h[6],O=this.h[7],L=this.h[8],U=this.h[9],R=this.r[0],M=this.r[1],I=this.r[2],N=this.r[3],j=this.r[4],D=this.r[5],z=this.r[6],H=this.r[7],B=this.r[8],F=this.r[9];n>=16;)d=l=0,d+=(k+=8191&(r=255&t[e+0]|(255&t[e+1])<<8))*R,d+=(C+=8191&(r>>>13|(i=255&t[e+2]|(255&t[e+3])<<8)<<3))*(5*F),d+=(T+=8191&(i>>>10|(s=255&t[e+4]|(255&t[e+5])<<8)<<6))*(5*B),d+=(E+=8191&(s>>>7|(o=255&t[e+6]|(255&t[e+7])<<8)<<9))*(5*H),l=(d+=(A+=8191&(o>>>4|(a=255&t[e+8]|(255&t[e+9])<<8)<<12))*(5*z))>>>13,d&=8191,d+=(P+=a>>>1&8191)*(5*D),d+=(x+=8191&(a>>>14|(h=255&t[e+10]|(255&t[e+11])<<8)<<2))*(5*j),d+=(O+=8191&(h>>>11|(c=255&t[e+12]|(255&t[e+13])<<8)<<5))*(5*N),d+=(L+=8191&(c>>>8|(u=255&t[e+14]|(255&t[e+15])<<8)<<8))*(5*I),f=l+=(d+=(U+=u>>>5|S)*(5*M))>>>13,f+=k*M,f+=C*R,f+=T*(5*F),f+=E*(5*B),l=(f+=A*(5*H))>>>13,f&=8191,f+=P*(5*z),f+=x*(5*D),f+=O*(5*j),f+=L*(5*N),l+=(f+=U*(5*I))>>>13,f&=8191,p=l,p+=k*I,p+=C*M,p+=T*R,p+=E*(5*F),l=(p+=A*(5*B))>>>13,p&=8191,p+=P*(5*H),p+=x*(5*z),p+=O*(5*D),p+=L*(5*j),g=l+=(p+=U*(5*N))>>>13,g+=k*N,g+=C*I,g+=T*M,g+=E*R,l=(g+=A*(5*F))>>>13,g&=8191,g+=P*(5*B),g+=x*(5*H),g+=O*(5*z),g+=L*(5*D),b=l+=(g+=U*(5*j))>>>13,b+=k*j,b+=C*N,b+=T*I,b+=E*M,l=(b+=A*R)>>>13,b&=8191,b+=P*(5*F),b+=x*(5*B),b+=O*(5*H),b+=L*(5*z),v=l+=(b+=U*(5*D))>>>13,v+=k*D,v+=C*j,v+=T*N,v+=E*I,l=(v+=A*M)>>>13,v&=8191,v+=P*R,v+=x*(5*F),v+=O*(5*B),v+=L*(5*H),y=l+=(v+=U*(5*z))>>>13,y+=k*z,y+=C*D,y+=T*j,y+=E*N,l=(y+=A*I)>>>13,y&=8191,y+=P*M,y+=x*R,y+=O*(5*F),y+=L*(5*B),m=l+=(y+=U*(5*H))>>>13,m+=k*H,m+=C*z,m+=T*D,m+=E*j,l=(m+=A*N)>>>13,m&=8191,m+=P*I,m+=x*M,m+=O*R,m+=L*(5*F),w=l+=(m+=U*(5*B))>>>13,w+=k*B,w+=C*H,w+=T*z,w+=E*D,l=(w+=A*j)>>>13,w&=8191,w+=P*N,w+=x*I,w+=O*M,w+=L*R,_=l+=(w+=U*(5*F))>>>13,_+=k*F,_+=C*B,_+=T*H,_+=E*z,l=(_+=A*D)>>>13,_&=8191,_+=P*j,_+=x*N,_+=O*I,_+=L*M,k=d=8191&(l=(l=((l+=(_+=U*R)>>>13)<<2)+l|0)+(d&=8191)|0),C=f+=l>>>=13,T=p&=8191,E=g&=8191,A=b&=8191,P=v&=8191,x=y&=8191,O=m&=8191,L=w&=8191,U=_&=8191,e+=16,n-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=E,this.h[4]=A,this.h[5]=P,this.h[6]=x,this.h[7]=O,this.h[8]=L,this.h[9]=U},T.prototype.finish=function(t,e){var n,r,i,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=n,n=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,o[0]=this.h[0]+5,n=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+n,n=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,r=(1^n)-1,s=0;s<10;s++)o[s]&=r;for(r=~r,s=0;s<10;s++)this.h[s]=this.h[s]&r|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,s=1;s<8;s++)i=(this.h[s]+this.pad[s]|0)+(i>>>16)|0,this.h[s]=65535&i;t[e+0]=this.h[0]>>>0&255,t[e+1]=this.h[0]>>>8&255,t[e+2]=this.h[1]>>>0&255,t[e+3]=this.h[1]>>>8&255,t[e+4]=this.h[2]>>>0&255,t[e+5]=this.h[2]>>>8&255,t[e+6]=this.h[3]>>>0&255,t[e+7]=this.h[3]>>>8&255,t[e+8]=this.h[4]>>>0&255,t[e+9]=this.h[4]>>>8&255,t[e+10]=this.h[5]>>>0&255,t[e+11]=this.h[5]>>>8&255,t[e+12]=this.h[6]>>>0&255,t[e+13]=this.h[6]>>>8&255,t[e+14]=this.h[7]>>>0&255,t[e+15]=this.h[7]>>>8&255},T.prototype.update=function(t,e,n){var r,i;if(this.leftover){for((i=16-this.leftover)>n&&(i=n),r=0;r=16&&(i=n-n%16,this.blocks(t,e,i),e+=i,n-=i),n){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+X,O[S]=n[k+0]<<24|n[k+1]<<16|n[k+2]<<8|n[k+3],L[S]=n[k+4]<<24|n[k+5]<<16|n[k+6]<<8|n[k+7];for(S=0;S<80;S++)if(i=U,s=R,o=M,a=I,h=N,c=j,u=D,z,d=H,f=B,p=F,g=q,b=Y,v=K,y=$,J,E=65535&(T=J),A=T>>>16,P=65535&(C=z),x=C>>>16,E+=65535&(T=(Y>>>14|N<<18)^(Y>>>18|N<<14)^(N>>>9|Y<<23)),A+=T>>>16,P+=65535&(C=(N>>>14|Y<<18)^(N>>>18|Y<<14)^(Y>>>9|N<<23)),x+=C>>>16,E+=65535&(T=Y&K^~Y&$),A+=T>>>16,P+=65535&(C=N&j^~N&D),x+=C>>>16,E+=65535&(T=W[2*S+1]),A+=T>>>16,P+=65535&(C=W[2*S]),x+=C>>>16,C=O[S%16],A+=(T=L[S%16])>>>16,P+=65535&C,x+=C>>>16,P+=(A+=(E+=65535&T)>>>16)>>>16,E=65535&(T=_=65535&E|A<<16),A=T>>>16,P=65535&(C=w=65535&P|(x+=P>>>16)<<16),x=C>>>16,E+=65535&(T=(H>>>28|U<<4)^(U>>>2|H<<30)^(U>>>7|H<<25)),A+=T>>>16,P+=65535&(C=(U>>>28|H<<4)^(H>>>2|U<<30)^(H>>>7|U<<25)),x+=C>>>16,A+=(T=H&B^H&F^B&F)>>>16,P+=65535&(C=U&R^U&M^R&M),x+=C>>>16,l=65535&(P+=(A+=(E+=65535&T)>>>16)>>>16)|(x+=P>>>16)<<16,m=65535&E|A<<16,E=65535&(T=g),A=T>>>16,P=65535&(C=a),x=C>>>16,A+=(T=_)>>>16,P+=65535&(C=w),x+=C>>>16,R=i,M=s,I=o,N=a=65535&(P+=(A+=(E+=65535&T)>>>16)>>>16)|(x+=P>>>16)<<16,j=h,D=c,z=u,U=l,B=d,F=f,q=p,Y=g=65535&E|A<<16,K=b,$=v,J=y,H=m,S%16==15)for(k=0;k<16;k++)C=O[k],E=65535&(T=L[k]),A=T>>>16,P=65535&C,x=C>>>16,C=O[(k+9)%16],E+=65535&(T=L[(k+9)%16]),A+=T>>>16,P+=65535&C,x+=C>>>16,w=O[(k+1)%16],E+=65535&(T=((_=L[(k+1)%16])>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25)),A+=T>>>16,P+=65535&(C=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7),x+=C>>>16,w=O[(k+14)%16],A+=(T=((_=L[(k+14)%16])>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26))>>>16,P+=65535&(C=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6),x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,O[k]=65535&P|x<<16,L[k]=65535&E|A<<16;E=65535&(T=H),A=T>>>16,P=65535&(C=U),x=C>>>16,C=t[0],A+=(T=e[0])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[0]=U=65535&P|x<<16,e[0]=H=65535&E|A<<16,E=65535&(T=B),A=T>>>16,P=65535&(C=R),x=C>>>16,C=t[1],A+=(T=e[1])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[1]=R=65535&P|x<<16,e[1]=B=65535&E|A<<16,E=65535&(T=F),A=T>>>16,P=65535&(C=M),x=C>>>16,C=t[2],A+=(T=e[2])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[2]=M=65535&P|x<<16,e[2]=F=65535&E|A<<16,E=65535&(T=q),A=T>>>16,P=65535&(C=I),x=C>>>16,C=t[3],A+=(T=e[3])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[3]=I=65535&P|x<<16,e[3]=q=65535&E|A<<16,E=65535&(T=Y),A=T>>>16,P=65535&(C=N),x=C>>>16,C=t[4],A+=(T=e[4])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[4]=N=65535&P|x<<16,e[4]=Y=65535&E|A<<16,E=65535&(T=K),A=T>>>16,P=65535&(C=j),x=C>>>16,C=t[5],A+=(T=e[5])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[5]=j=65535&P|x<<16,e[5]=K=65535&E|A<<16,E=65535&(T=$),A=T>>>16,P=65535&(C=D),x=C>>>16,C=t[6],A+=(T=e[6])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[6]=D=65535&P|x<<16,e[6]=$=65535&E|A<<16,E=65535&(T=J),A=T>>>16,P=65535&(C=z),x=C>>>16,C=t[7],A+=(T=e[7])>>>16,P+=65535&C,x+=C>>>16,x+=(P+=(A+=(E+=65535&T)>>>16)>>>16)>>>16,t[7]=z=65535&P|x<<16,e[7]=J=65535&E|A<<16,X+=128,r-=128}return r}function V(t,e,n){var r,i=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),a=n;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,G(i,s,e,n),n%=128,r=0;r=0;--i)Q(t,e,r=n[i/8|0]>>(7&i)&1),Z(e,t),Z(t,t),Q(t,e,r)}function nt(t,n){var r=[e(),e(),e(),e()];O(r[0],l),O(r[1],d),O(r[2],a),z(r[3],l,d),et(t,r,n)}function rt(t,n,i){var s,o=new Uint8Array(64),a=[e(),e(),e(),e()];for(i||r(n,32),V(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,nt(a,o),tt(t,a),s=0;s<32;s++)n[s+32]=t[s];return 0}var it=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function st(t,e){var n,r,i,s;for(r=63;r>=32;--r){for(n=0,i=r-32,s=r-12;i>4)*it[i],n=e[i]>>8,e[i]&=255;for(i=0;i<32;i++)e[i]-=n*it[i];for(r=0;r<32;r++)e[r+1]+=e[r]>>8,t[r]=255&e[r]}function ot(t){var e,n=new Float64Array(64);for(e=0;e<64;e++)n[e]=t[e];for(e=0;e<64;e++)t[e]=0;st(t,n)}function at(t,n,r,i){var s,o,a=new Uint8Array(64),h=new Uint8Array(64),c=new Uint8Array(64),u=new Float64Array(64),l=[e(),e(),e(),e()];V(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64;var d=r+64;for(s=0;s>7&&D(t[0],o,t[0]),z(t[3],t[0],t[1]),0)}(d,i))return-1;for(s=0;s=0},t.sign.keyPair=function(){var t=new Uint8Array(32),e=new Uint8Array(64);return rt(t,e),{publicKey:t,secretKey:e}},t.sign.keyPair.fromSecretKey=function(t){if(ut(t),64!==t.length)throw new Error("bad secret key size");for(var e=new Uint8Array(32),n=0;n(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as NativeNetInfo } from '@react-native-community/netinfo';\nimport EventsDispatcher from 'core/events/dispatcher';\nimport Util from 'core/util';\nimport Reachability from 'core/reachability';\n\nfunction hasOnlineConnectionState(connectionState): boolean {\n return connectionState.type.toLowerCase() !== 'none';\n}\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n online: boolean;\n\n constructor() {\n super();\n this.online = true;\n\n NativeNetInfo.fetch().then(connectionState => {\n this.online = hasOnlineConnectionState(connectionState);\n });\n\n NativeNetInfo.addEventListener(connectionState => {\n var isNowOnline = hasOnlineConnectionState(connectionState);\n\n // React Native counts the switch from Wi-Fi to Cellular\n // as a state change. Return if current and previous states\n // are both online/offline\n if (this.online === isNowOnline) return;\n this.online = isNowOnline;\n if (this.online) {\n this.emit('online');\n } else {\n this.emit('offline');\n }\n });\n }\n\n isOnline(): boolean {\n return this.online;\n }\n}\n\nexport var Network = new NetInfo();\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport xhrTimeline from 'isomorphic/timeline/xhr_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst ReactNative: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: xhrTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n return Math.floor(Math.random() * max);\n }\n};\n\nexport default ReactNative;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n\n url += '/' + 2 + '?' + query;\n\n var xhr = Runtime.createXHR();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n let { status, responseText } = xhr;\n if (status !== 200) {\n Logger.debug(\n `TimelineSender Error: received ${status} from stats.pusher.com`\n );\n return;\n }\n\n try {\n var { host } = JSON.parse(responseText);\n } catch (e) {\n Logger.debug(`TimelineSenderError: invalid response ${responseText}`);\n }\n if (host) {\n sender.host = host;\n }\n }\n };\n\n xhr.send();\n };\n};\n\nvar xhr = {\n name: 'xhr',\n getAgent\n};\n\nexport default xhr;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","module.exports = require(\"@react-native-community/netinfo\");","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/bootstrap","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/react-native/net_info.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/runtimes/isomorphic/timeline/xhr_timeline.ts","webpack://Pusher/./src/runtimes/react-native/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/(webpack)/buildin/global.js","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/external \"@react-native-community/netinfo\"","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extend","target","sources","length","extensions","constructor","stringify","arguments","push","safeJSONStringify","join","arrayIndexOf","array","item","nativeIndexOf","Array","indexOf","objectApply","f","keys","_","values","apply","context","global","map","result","filter","test","filterObject","Boolean","any","all","encodeParamsObject","data","encodeURIComponent","toString","buildQueryString","params","undefined","method","source","JSON","e","objects","paths","derez","path","nu","$ref","globalLog","message","console","log","args","this","globalLogWarn","globalLogError","warn","error","defaultLoggingFunction","logToConsole","Util","now","Date","valueOf","defer","callback","boundArguments","slice","concat","Dispatcher","failThrough","callbacks","global_callbacks","eventName","add","remove","unbind","unbind_global","metadata","fn","clearTimeout","timer","clearInterval","OneOffTimer","delay","super","setTimeout","PeriodicTimer","setInterval","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","getGenericURL","baseScheme","useTLS","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","hooks","priority","options","initialize","transportConnectionInitializer","state","timeline","id","generateUniqueID","handlesActivityChecks","supportsPing","socket","url","urls","getSocket","onError","changeState","bindListeners","debug","close","send","ping","beforeOpen","getPath","onopen","emit","type","buildTimelineMessage","closeEvent","code","reason","wasClean","unbindListeners","onOpen","onerror","onclose","onClose","onmessage","onMessage","onactivity","onActivity","info","cid","environment","isSupported","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","manager","minPingDelay","maxPingDelay","pingDelay","connection","createConnection","openTimestamp","onClosed","reportDeath","lifespan","Math","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","parse","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","finish","isEmpty","TimelineTransport","getAgent","BadEventName","Error","msg","setPrototypeOf","BadChannelName","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","status","urlStore","baseUrl","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","urlObj","pusher","subscribed","subscriptionPending","subscriptionCancelled","socketId","auth","suffix","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","authorize","assign","channel_data","config","channelAuthorizer","channelName","reset","members","member","myID","subscriptionData","presence","hash","count","me","memberData","user_info","authData","channelData","setMyID","user","signinDonePromise","user_data","handleInternalEvent","addedMember","addMember","removedMember","removeMember","onSubscription","disconnect","nacl","sharedSecret","handleEncryptedEvent","handleEvent","ciphertext","nonce","cipherText","secretbox","overheadLength","nonceLength","bytes","open","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","handshake","connect","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","ensureAborted","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","min","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","isRunning","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","number","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","http_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","xhr_streaming_transport","xhr_polling_transport","ws_loop","wss_loop","streaming_loop","polling_loop","http_loop","payload","position","xhr","getRequest","unloader","addUnloadListener","setRequestHeader","removeUnloadListener","abortRequest","chunk","advanceBuffer","isBufferTooLong","buffer","unreadData","endOfLinePosition","State","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","session","randomString","location","parts","exec","base","getLocation","readyState","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","start","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onChunk","onFinished","reconnect","unbind_all","getXHRAPI","onreadystatechange","onprogress","responseText","getDefaultStrategy","Transports","createSocket","createRequest","PusherClass","ready","getClientFeatures","getProtocol","createXHR","hasOnlineConnectionState","connectionState","toLowerCase","online","fetch","then","addEventListener","isNowOnline","AuthRequestType","query","authOptions","authRequestType","headerName","headers","headersProvider","dynamicHeaders","parsed","UserAuthentication","ChannelAuthorization","sender","host","setup","TimelineLevel","getAuthorizers","ajax","WebSocket","XMLHttpRequest","floor","random","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","version","cluster","features","failAttempt","onInitialized","serializedTransport","transportClass","enabledTransports","disabledTransports","ignoreNullOrigin","getAssistant","deferred","paramsProvider","dynamicParams","composeChannelQuery","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","err","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","userAuthenticator","_subscribeChannels","bind_global","reinstateSubscription","subscribe","ensure_subscribed","done","setDone","catch","isReady","instances","app_key","checkAppKey","statsHost","timelineParams","getConfig","global_emitter","sessionID","timelineSender","subscribeAll","isUsingTLS","internal","find","timelineSenderTimer","event_name","channel_name","cancelSubscription","signin","Runtime","ScriptReceivers","DependenciesReceivers","auth_callbacks","g","Function","window","validateOptions","_paddingCharacter","encodedLength","encode","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","b","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","set","clear","require","btoa","utob","b64chars","b64tab","charAt","cb_utob","cc","u","replace","cb_encode","ccc","padlen","ord","CallbackRegistry","_callbacks","prefix","prefixedEventName","names","removeCallback","removeAllCallbacks","binding","INVALID_UTF8","arr","pos","chars","n1","n2","n3","gf","init","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","vn","xi","y","yi","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","inp","k","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","sel25519","q","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","mask","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","crypto_hash","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","checkLengths","checkArrayTypes","TypeError","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","box","keyLength","scalarMult","scalarLength","groupElementLength","publicKey","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hashLength","setPRNG","crypto","self","msCrypto","getRandomValues","default","PusherWithEncryption"],"mappings":"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","file":"pusher.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as NativeNetInfo } from '@react-native-community/netinfo';\nimport EventsDispatcher from 'core/events/dispatcher';\nimport Util from 'core/util';\nimport Reachability from 'core/reachability';\n\nfunction hasOnlineConnectionState(connectionState): boolean {\n return connectionState.type.toLowerCase() !== 'none';\n}\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n online: boolean;\n\n constructor() {\n super();\n this.online = true;\n\n NativeNetInfo.fetch().then(connectionState => {\n this.online = hasOnlineConnectionState(connectionState);\n });\n\n NativeNetInfo.addEventListener(connectionState => {\n var isNowOnline = hasOnlineConnectionState(connectionState);\n\n // React Native counts the switch from Wi-Fi to Cellular\n // as a state change. Return if current and previous states\n // are both online/offline\n if (this.online === isNowOnline) return;\n this.online = isNowOnline;\n if (this.online) {\n this.emit('online');\n } else {\n this.emit('offline');\n }\n });\n }\n\n isOnline(): boolean {\n return this.online;\n }\n}\n\nexport var Network = new NetInfo();\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n\n url += '/' + 2 + '?' + query;\n\n var xhr = Runtime.createXHR();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n let { status, responseText } = xhr;\n if (status !== 200) {\n Logger.debug(\n `TimelineSender Error: received ${status} from stats.pusher.com`\n );\n return;\n }\n\n try {\n var { host } = JSON.parse(responseText);\n } catch (e) {\n Logger.debug(`TimelineSenderError: invalid response ${responseText}`);\n }\n if (host) {\n sender.host = host;\n }\n }\n };\n\n xhr.send();\n };\n};\n\nvar xhr = {\n name: 'xhr',\n getAgent\n};\n\nexport default xhr;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport xhrTimeline from 'isomorphic/timeline/xhr_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst ReactNative: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: xhrTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n return Math.floor(Math.random() * max);\n }\n};\n\nexport default ReactNative;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","module.exports = require(\"@react-native-community/netinfo\");","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/web/pusher-with-encryption.js b/dist/web/pusher-with-encryption.js index d7f6edb86..a3d6edff9 100644 --- a/dist/web/pusher-with-encryption.js +++ b/dist/web/pusher-with-encryption.js @@ -1,5 +1,5 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher @@ -2963,14 +2963,17 @@ module.exports = __webpack_require__(5).default; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); +// EXPORTS +__webpack_require__.d(__webpack_exports__, "default", function() { return /* binding */ pusher_with_encryption_PusherWithEncryption; }); + // CONCATENATED MODULE: ./src/runtimes/web/dom/script_receiver_factory.ts -var ScriptReceiverFactory = (function () { - function ScriptReceiverFactory(prefix, name) { +class ScriptReceiverFactory { + constructor(prefix, name) { this.lastId = 0; this.prefix = prefix; this.name = name; } - ScriptReceiverFactory.prototype.create = function (callback) { + create(callback) { this.lastId++; var number = this.lastId; var id = this.prefix + number; @@ -2984,18 +2987,16 @@ var ScriptReceiverFactory = (function () { }; this[number] = callbackWrapper; return { number: number, id: id, name: name, callback: callbackWrapper }; - }; - ScriptReceiverFactory.prototype.remove = function (receiver) { + } + remove(receiver) { delete this[receiver.number]; - }; - return ScriptReceiverFactory; -}()); - + } +} var ScriptReceivers = new ScriptReceiverFactory('_pusher_script_', 'Pusher.ScriptReceivers'); // CONCATENATED MODULE: ./src/core/defaults.ts var Defaults = { - VERSION: "8.0.2", + VERSION: "8.1.0", PROTOCOL: 7, wsPort: 80, wssPort: 443, @@ -3027,13 +3028,13 @@ var Defaults = { // CONCATENATED MODULE: ./src/runtimes/web/dom/dependency_loader.ts -var dependency_loader_DependencyLoader = (function () { - function DependencyLoader(options) { +class dependency_loader_DependencyLoader { + constructor(options) { this.options = options; this.receivers = options.receivers || ScriptReceivers; this.loading = {}; } - DependencyLoader.prototype.load = function (name, options, callback) { + load(name, options, callback) { var self = this; if (self.loading[name] && self.loading[name].length > 0) { self.loading[name].push(callback); @@ -3058,8 +3059,8 @@ var dependency_loader_DependencyLoader = (function () { }); request.send(receiver); } - }; - DependencyLoader.prototype.getRoot = function (options) { + } + getRoot(options) { var cdn; var protocol = runtime.getDocument().location.protocol; if ((options && options.useTLS) || protocol === 'https:') { @@ -3069,20 +3070,18 @@ var dependency_loader_DependencyLoader = (function () { cdn = this.options.cdn_http; } return cdn.replace(/\/*$/, '') + '/' + this.options.version; - }; - DependencyLoader.prototype.getPath = function (name, options) { + } + getPath(name, options) { return this.getRoot(options) + '/' + name + this.options.suffix + '.js'; - }; - return DependencyLoader; -}()); -/* harmony default export */ var dependency_loader = (dependency_loader_DependencyLoader); + } +} // CONCATENATED MODULE: ./src/runtimes/web/dom/dependencies.ts var DependenciesReceivers = new ScriptReceiverFactory('_pusher_dependencies', 'Pusher.DependenciesReceivers'); -var Dependencies = new dependency_loader({ +var Dependencies = new dependency_loader_DependencyLoader({ cdn_http: defaults.cdn_http, cdn_https: defaults.cdn_https, version: defaults.VERSION, @@ -3091,7 +3090,7 @@ var Dependencies = new dependency_loader({ }); // CONCATENATED MODULE: ./src/core/utils/url_store.ts -var urlStore = { +const urlStore = { baseUrl: 'https://pusher.com', urls: { authenticationEndpoint: { @@ -3111,12 +3110,12 @@ var urlStore = { } } }; -var buildLogSuffix = function (key) { - var urlPrefix = 'See:'; - var urlObj = urlStore.urls[key]; +const buildLogSuffix = function (key) { + const urlPrefix = 'See:'; + const urlObj = urlStore.urls[key]; if (!urlObj) return ''; - var url; + let url; if (urlObj.fullUrl) { url = urlObj.fullUrl; } @@ -3125,9 +3124,9 @@ var buildLogSuffix = function (key) { } if (!url) return ''; - return urlPrefix + " " + url; + return `${urlPrefix} ${url}`; }; -/* harmony default export */ var url_store = ({ buildLogSuffix: buildLogSuffix }); +/* harmony default export */ var url_store = ({ buildLogSuffix }); // CONCATENATED MODULE: ./src/core/auth/options.ts var AuthRequestType; @@ -3137,134 +3136,76 @@ var AuthRequestType; })(AuthRequestType || (AuthRequestType = {})); // CONCATENATED MODULE: ./src/core/errors.ts -var __extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var BadEventName = (function (_super) { - __extends(BadEventName, _super); - function BadEventName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadEventName; -}(Error)); - -var BadChannelName = (function (_super) { - __extends(BadChannelName, _super); - function BadChannelName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadChannelName; -}(Error)); - -var RequestTimedOut = (function (_super) { - __extends(RequestTimedOut, _super); - function RequestTimedOut(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return RequestTimedOut; -}(Error)); - -var TransportPriorityTooLow = (function (_super) { - __extends(TransportPriorityTooLow, _super); - function TransportPriorityTooLow(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportPriorityTooLow; -}(Error)); - -var TransportClosed = (function (_super) { - __extends(TransportClosed, _super); - function TransportClosed(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportClosed; -}(Error)); - -var UnsupportedFeature = (function (_super) { - __extends(UnsupportedFeature, _super); - function UnsupportedFeature(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedFeature; -}(Error)); - -var UnsupportedTransport = (function (_super) { - __extends(UnsupportedTransport, _super); - function UnsupportedTransport(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedTransport; -}(Error)); - -var UnsupportedStrategy = (function (_super) { - __extends(UnsupportedStrategy, _super); - function UnsupportedStrategy(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedStrategy; -}(Error)); - -var HTTPAuthError = (function (_super) { - __extends(HTTPAuthError, _super); - function HTTPAuthError(status, msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - _this.status = status; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return HTTPAuthError; -}(Error)); - +class BadEventName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class BadChannelName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class RequestTimedOut extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportPriorityTooLow extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportClosed extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedFeature extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedTransport extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedStrategy extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class HTTPAuthError extends Error { + constructor(status, msg) { + super(msg); + this.status = status; + Object.setPrototypeOf(this, new.target.prototype); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/auth/xhr_auth.ts -var ajax = function (context, query, authOptions, authRequestType, callback) { - var xhr = runtime.createXHR(); +const ajax = function (context, query, authOptions, authRequestType, callback) { + const xhr = runtime.createXHR(); xhr.open('POST', authOptions.endpoint, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); for (var headerName in authOptions.headers) { xhr.setRequestHeader(headerName, authOptions.headers[headerName]); } if (authOptions.headersProvider != null) { - var dynamicHeaders = authOptions.headersProvider(); + let dynamicHeaders = authOptions.headersProvider(); for (var headerName in dynamicHeaders) { xhr.setRequestHeader(headerName, dynamicHeaders[headerName]); } @@ -3272,31 +3213,31 @@ var ajax = function (context, query, authOptions, authRequestType, callback) { xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { - var data = void 0; - var parsed = false; + let data; + let parsed = false; try { data = JSON.parse(xhr.responseText); parsed = true; } catch (e) { - callback(new HTTPAuthError(200, "JSON returned from " + authRequestType.toString() + " endpoint was invalid, yet status code was 200. Data was: " + xhr.responseText), null); + callback(new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${xhr.responseText}`), null); } if (parsed) { callback(null, data); } } else { - var suffix = ''; + let suffix = ''; switch (authRequestType) { case AuthRequestType.UserAuthentication: suffix = url_store.buildLogSuffix('authenticationEndpoint'); break; case AuthRequestType.ChannelAuthorization: - suffix = "Clients must be authorized to join private or presence channels. " + url_store.buildLogSuffix('authorizationEndpoint'); + suffix = `Clients must be authorized to join private or presence channels. ${url_store.buildLogSuffix('authorizationEndpoint')}`; break; } - callback(new HTTPAuthError(xhr.status, "Unable to retrieve auth string from " + authRequestType.toString() + " endpoint - " + - ("received status: " + xhr.status + " from " + authOptions.endpoint + ". " + suffix)), null); + callback(new HTTPAuthError(xhr.status, `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` + + `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`), null); } } }; @@ -3347,43 +3288,28 @@ var btoa = window.btoa || }; // CONCATENATED MODULE: ./src/core/utils/timers/abstract_timer.ts -var Timer = (function () { - function Timer(set, clear, delay, callback) { - var _this = this; +class Timer { + constructor(set, clear, delay, callback) { this.clear = clear; - this.timer = set(function () { - if (_this.timer) { - _this.timer = callback(_this.timer); + this.timer = set(() => { + if (this.timer) { + this.timer = callback(this.timer); } }, delay); } - Timer.prototype.isRunning = function () { + isRunning() { return this.timer !== null; - }; - Timer.prototype.ensureAborted = function () { + } + ensureAborted() { if (this.timer) { this.clear(this.timer); this.timer = null; } - }; - return Timer; -}()); + } +} /* harmony default export */ var abstract_timer = (Timer); // CONCATENATED MODULE: ./src/core/utils/timers/index.ts -var timers_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); function timers_clearTimeout(timer) { window.clearTimeout(timer); @@ -3391,33 +3317,27 @@ function timers_clearTimeout(timer) { function timers_clearInterval(timer) { window.clearInterval(timer); } -var OneOffTimer = (function (_super) { - timers_extends(OneOffTimer, _super); - function OneOffTimer(delay, callback) { - return _super.call(this, setTimeout, timers_clearTimeout, delay, function (timer) { +class timers_OneOffTimer extends abstract_timer { + constructor(delay, callback) { + super(setTimeout, timers_clearTimeout, delay, function (timer) { callback(); return null; - }) || this; + }); } - return OneOffTimer; -}(abstract_timer)); - -var PeriodicTimer = (function (_super) { - timers_extends(PeriodicTimer, _super); - function PeriodicTimer(delay, callback) { - return _super.call(this, setInterval, timers_clearInterval, delay, function (timer) { +} +class timers_PeriodicTimer extends abstract_timer { + constructor(delay, callback) { + super(setInterval, timers_clearInterval, delay, function (timer) { callback(); return timer; - }) || this; + }); } - return PeriodicTimer; -}(abstract_timer)); - +} // CONCATENATED MODULE: ./src/core/util.ts var Util = { - now: function () { + now() { if (Date.now) { return Date.now(); } @@ -3425,14 +3345,10 @@ var Util = { return new Date().valueOf(); } }, - defer: function (callback) { - return new OneOffTimer(0, callback); + defer(callback) { + return new timers_OneOffTimer(0, callback); }, - method: function (name) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + method(name, ...args) { var boundArguments = Array.prototype.slice.call(arguments, 1); return function (object) { return object[name].apply(object, boundArguments.concat(arguments)); @@ -3444,11 +3360,7 @@ var Util = { // CONCATENATED MODULE: ./src/core/utils/collections.ts -function extend(target) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } +function extend(target, ...sources) { for (var i = 0; i < sources.length; i++) { var extensions = sources[i]; for (var property in extensions) { @@ -3642,67 +3554,50 @@ function safeJSONStringify(source) { // CONCATENATED MODULE: ./src/core/logger.ts -var logger_Logger = (function () { - function Logger() { - this.globalLog = function (message) { +class logger_Logger { + constructor() { + this.globalLog = (message) => { if (window.console && window.console.log) { window.console.log(message); } }; } - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + debug(...args) { this.log(this.globalLog, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + warn(...args) { this.log(this.globalLogWarn, args); - }; - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + error(...args) { this.log(this.globalLogError, args); - }; - Logger.prototype.globalLogWarn = function (message) { + } + globalLogWarn(message) { if (window.console && window.console.warn) { window.console.warn(message); } else { this.globalLog(message); } - }; - Logger.prototype.globalLogError = function (message) { + } + globalLogError(message) { if (window.console && window.console.error) { window.console.error(message); } else { this.globalLogWarn(message); } - }; - Logger.prototype.log = function (defaultLoggingFunction) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + } + log(defaultLoggingFunction, ...args) { var message = stringify.apply(this, arguments); if (core_pusher.log) { core_pusher.log(message); } else if (core_pusher.logToConsole) { - var log = defaultLoggingFunction.bind(this); + const log = defaultLoggingFunction.bind(this); log(message); } - }; - return Logger; -}()); + } +} /* harmony default export */ var logger = (new logger_Logger()); // CONCATENATED MODULE: ./src/runtimes/web/auth/jsonp_auth.ts @@ -3710,7 +3605,7 @@ var logger_Logger = (function () { var jsonp = function (context, query, authOptions, authRequestType, callback) { if (authOptions.headers !== undefined || authOptions.headersProvider != null) { - logger.warn("To send headers with the " + authRequestType.toString() + " request, you must use AJAX, rather than JSONP."); + logger.warn(`To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`); } var callbackName = context.nextAuthCallbackID.toString(); context.nextAuthCallbackID++; @@ -3732,11 +3627,11 @@ var jsonp = function (context, query, authOptions, authRequestType, callback) { /* harmony default export */ var jsonp_auth = (jsonp); // CONCATENATED MODULE: ./src/runtimes/web/dom/script_request.ts -var ScriptRequest = (function () { - function ScriptRequest(src) { +class ScriptRequest { + constructor(src) { this.src = src; } - ScriptRequest.prototype.send = function (receiver) { + send(receiver) { var self = this; var errorString = 'Error loading ' + self.src; self.script = document.createElement('script'); @@ -3776,8 +3671,8 @@ var ScriptRequest = (function () { if (self.errorScript) { head.insertBefore(self.errorScript, self.script.nextSibling); } - }; - ScriptRequest.prototype.cleanup = function () { + } + cleanup() { if (this.script) { this.script.onload = this.script.onerror = null; this.script.onreadystatechange = null; @@ -3790,20 +3685,18 @@ var ScriptRequest = (function () { } this.script = null; this.errorScript = null; - }; - return ScriptRequest; -}()); -/* harmony default export */ var script_request = (ScriptRequest); + } +} // CONCATENATED MODULE: ./src/runtimes/web/dom/jsonp_request.ts -var jsonp_request_JSONPRequest = (function () { - function JSONPRequest(url, data) { +class jsonp_request_JSONPRequest { + constructor(url, data) { this.url = url; this.data = data; } - JSONPRequest.prototype.send = function (receiver) { + send(receiver) { if (this.request) { return; } @@ -3811,15 +3704,13 @@ var jsonp_request_JSONPRequest = (function () { var url = this.url + '/' + receiver.number + '?' + query; this.request = runtime.createScriptRequest(url); this.request.send(receiver); - }; - JSONPRequest.prototype.cleanup = function () { + } + cleanup() { if (this.request) { this.request.cleanup(); } - }; - return JSONPRequest; -}()); -/* harmony default export */ var jsonp_request = (jsonp_request_JSONPRequest); + } +} // CONCATENATED MODULE: ./src/runtimes/web/timeline/jsonp_timeline.ts @@ -3844,7 +3735,7 @@ var getAgent = function (sender, useTLS) { }; var jsonp_timeline_jsonp = { name: 'jsonp', - getAgent: getAgent + getAgent }; /* harmony default export */ var jsonp_timeline = (jsonp_timeline_jsonp); @@ -3888,14 +3779,14 @@ var sockjs = { // CONCATENATED MODULE: ./src/core/events/callback_registry.ts -var callback_registry_CallbackRegistry = (function () { - function CallbackRegistry() { +class callback_registry_CallbackRegistry { + constructor() { this._callbacks = {}; } - CallbackRegistry.prototype.get = function (name) { + get(name) { return this._callbacks[prefix(name)]; - }; - CallbackRegistry.prototype.add = function (name, callback, context) { + } + add(name, callback, context) { var prefixedEventName = prefix(name); this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || []; @@ -3903,8 +3794,8 @@ var callback_registry_CallbackRegistry = (function () { fn: callback, context: context }); - }; - CallbackRegistry.prototype.remove = function (name, callback, context) { + } + remove(name, callback, context) { if (!name && !callback && !context) { this._callbacks = {}; return; @@ -3916,8 +3807,8 @@ var callback_registry_CallbackRegistry = (function () { else { this.removeAllCallbacks(names); } - }; - CallbackRegistry.prototype.removeCallback = function (names, callback, context) { + } + removeCallback(names, callback, context) { apply(names, function (name) { this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) { return ((callback && callback !== binding.fn) || @@ -3927,15 +3818,13 @@ var callback_registry_CallbackRegistry = (function () { delete this._callbacks[name]; } }, this); - }; - CallbackRegistry.prototype.removeAllCallbacks = function (names) { + } + removeAllCallbacks(names) { apply(names, function (name) { delete this._callbacks[name]; }, this); - }; - return CallbackRegistry; -}()); -/* harmony default export */ var callback_registry = (callback_registry_CallbackRegistry); + } +} function prefix(name) { return '_' + name; } @@ -3943,38 +3832,38 @@ function prefix(name) { // CONCATENATED MODULE: ./src/core/events/dispatcher.ts -var dispatcher_Dispatcher = (function () { - function Dispatcher(failThrough) { - this.callbacks = new callback_registry(); +class dispatcher_Dispatcher { + constructor(failThrough) { + this.callbacks = new callback_registry_CallbackRegistry(); this.global_callbacks = []; this.failThrough = failThrough; } - Dispatcher.prototype.bind = function (eventName, callback, context) { + bind(eventName, callback, context) { this.callbacks.add(eventName, callback, context); return this; - }; - Dispatcher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_callbacks.push(callback); return this; - }; - Dispatcher.prototype.unbind = function (eventName, callback, context) { + } + unbind(eventName, callback, context) { this.callbacks.remove(eventName, callback, context); return this; - }; - Dispatcher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { if (!callback) { this.global_callbacks = []; return this; } - this.global_callbacks = filter(this.global_callbacks || [], function (c) { return c !== callback; }); + this.global_callbacks = filter(this.global_callbacks || [], c => c !== callback); return this; - }; - Dispatcher.prototype.unbind_all = function () { + } + unbind_all() { this.unbind(); this.unbind_global(); return this; - }; - Dispatcher.prototype.emit = function (eventName, data, metadata) { + } + emit(eventName, data, metadata) { for (var i = 0; i < this.global_callbacks.length; i++) { this.global_callbacks[i](eventName, data); } @@ -3995,54 +3884,36 @@ var dispatcher_Dispatcher = (function () { this.failThrough(eventName, data); } return this; - }; - return Dispatcher; -}()); -/* harmony default export */ var dispatcher = (dispatcher_Dispatcher); + } +} // CONCATENATED MODULE: ./src/core/transports/transport_connection.ts -var transport_connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var transport_connection_TransportConnection = (function (_super) { - transport_connection_extends(TransportConnection, _super); - function TransportConnection(hooks, name, priority, key, options) { - var _this = _super.call(this) || this; - _this.initialize = runtime.transportConnectionInitializer; - _this.hooks = hooks; - _this.name = name; - _this.priority = priority; - _this.key = key; - _this.options = options; - _this.state = 'new'; - _this.timeline = options.timeline; - _this.activityTimeout = options.activityTimeout; - _this.id = _this.timeline.generateUniqueID(); - return _this; +class transport_connection_TransportConnection extends dispatcher_Dispatcher { + constructor(hooks, name, priority, key, options) { + super(); + this.initialize = runtime.transportConnectionInitializer; + this.hooks = hooks; + this.name = name; + this.priority = priority; + this.key = key; + this.options = options; + this.state = 'new'; + this.timeline = options.timeline; + this.activityTimeout = options.activityTimeout; + this.id = this.timeline.generateUniqueID(); } - TransportConnection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return Boolean(this.hooks.handlesActivityChecks); - }; - TransportConnection.prototype.supportsPing = function () { + } + supportsPing() { return Boolean(this.hooks.supportsPing); - }; - TransportConnection.prototype.connect = function () { - var _this = this; + } + connect() { if (this.socket || this.state !== 'initialized') { return false; } @@ -4051,18 +3922,18 @@ var transport_connection_TransportConnection = (function (_super) { this.socket = this.hooks.getSocket(url, this.options); } catch (e) { - util.defer(function () { - _this.onError(e); - _this.changeState('closed'); + util.defer(() => { + this.onError(e); + this.changeState('closed'); }); return false; } this.bindListeners(); - logger.debug('Connecting', { transport: this.name, url: url }); + logger.debug('Connecting', { transport: this.name, url }); this.changeState('connecting'); return true; - }; - TransportConnection.prototype.close = function () { + } + close() { if (this.socket) { this.socket.close(); return true; @@ -4070,13 +3941,12 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.send = function (data) { - var _this = this; + } + send(data) { if (this.state === 'open') { - util.defer(function () { - if (_this.socket) { - _this.socket.send(data); + util.defer(() => { + if (this.socket) { + this.socket.send(data); } }); return true; @@ -4084,24 +3954,24 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.ping = function () { + } + ping() { if (this.state === 'open' && this.supportsPing()) { this.socket.ping(); } - }; - TransportConnection.prototype.onOpen = function () { + } + onOpen() { if (this.hooks.beforeOpen) { this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options)); } this.changeState('open'); this.socket.onopen = undefined; - }; - TransportConnection.prototype.onError = function (error) { + } + onError(error) { this.emit('error', { type: 'WebSocketError', error: error }); this.timeline.error(this.buildTimelineMessage({ error: error.toString() })); - }; - TransportConnection.prototype.onClose = function (closeEvent) { + } + onClose(closeEvent) { if (closeEvent) { this.changeState('closed', { code: closeEvent.code, @@ -4114,34 +3984,33 @@ var transport_connection_TransportConnection = (function (_super) { } this.unbindListeners(); this.socket = undefined; - }; - TransportConnection.prototype.onMessage = function (message) { + } + onMessage(message) { this.emit('message', message); - }; - TransportConnection.prototype.onActivity = function () { + } + onActivity() { this.emit('activity'); - }; - TransportConnection.prototype.bindListeners = function () { - var _this = this; - this.socket.onopen = function () { - _this.onOpen(); + } + bindListeners() { + this.socket.onopen = () => { + this.onOpen(); }; - this.socket.onerror = function (error) { - _this.onError(error); + this.socket.onerror = error => { + this.onError(error); }; - this.socket.onclose = function (closeEvent) { - _this.onClose(closeEvent); + this.socket.onclose = closeEvent => { + this.onClose(closeEvent); }; - this.socket.onmessage = function (message) { - _this.onMessage(message); + this.socket.onmessage = message => { + this.onMessage(message); }; if (this.supportsPing()) { - this.socket.onactivity = function () { - _this.onActivity(); + this.socket.onactivity = () => { + this.onActivity(); }; } - }; - TransportConnection.prototype.unbindListeners = function () { + } + unbindListeners() { if (this.socket) { this.socket.onopen = undefined; this.socket.onerror = undefined; @@ -4151,44 +4020,40 @@ var transport_connection_TransportConnection = (function (_super) { this.socket.onactivity = undefined; } } - }; - TransportConnection.prototype.changeState = function (state, params) { + } + changeState(state, params) { this.state = state; this.timeline.info(this.buildTimelineMessage({ state: state, params: params })); this.emit(state, params); - }; - TransportConnection.prototype.buildTimelineMessage = function (message) { + } + buildTimelineMessage(message) { return extend({ cid: this.id }, message); - }; - return TransportConnection; -}(dispatcher)); -/* harmony default export */ var transport_connection = (transport_connection_TransportConnection); + } +} // CONCATENATED MODULE: ./src/core/transports/transport.ts -var transport_Transport = (function () { - function Transport(hooks) { +class transport_Transport { + constructor(hooks) { this.hooks = hooks; } - Transport.prototype.isSupported = function (environment) { + isSupported(environment) { return this.hooks.isSupported(environment); - }; - Transport.prototype.createConnection = function (name, priority, key, options) { - return new transport_connection(this.hooks, name, priority, key, options); - }; - return Transport; -}()); -/* harmony default export */ var transports_transport = (transport_Transport); + } + createConnection(name, priority, key, options) { + return new transport_connection_TransportConnection(this.hooks, name, priority, key, options); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/transports/transports.ts -var WSTransport = new transports_transport({ +var WSTransport = new transport_Transport({ urls: ws, handlesActivityChecks: false, supportsPing: false, @@ -4225,8 +4090,8 @@ var xhrConfiguration = { return runtime.isXHRSupported(); } }; -var XHRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xhrConfiguration))); -var XHRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xhrConfiguration)); +var XHRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xhrConfiguration))); +var XHRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xhrConfiguration)); var Transports = { ws: WSTransport, xhr_streaming: XHRStreamingTransport, @@ -4241,7 +4106,7 @@ var Transports = { -var SockJSTransport = new transports_transport({ +var SockJSTransport = new transport_Transport({ file: 'sockjs', urls: sockjs, handlesActivityChecks: true, @@ -4272,33 +4137,19 @@ var xdrConfiguration = { return yes; } }; -var XDRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xdrConfiguration))); -var XDRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xdrConfiguration)); +var XDRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xdrConfiguration))); +var XDRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xdrConfiguration)); transports.xdr_streaming = XDRStreamingTransport; transports.xdr_polling = XDRPollingTransport; transports.sockjs = SockJSTransport; /* harmony default export */ var transports_transports = (transports); // CONCATENATED MODULE: ./src/runtimes/web/net_info.ts -var net_info_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var NetInfo = (function (_super) { - net_info_extends(NetInfo, _super); - function NetInfo() { - var _this = _super.call(this) || this; - var self = _this; +class net_info_NetInfo extends dispatcher_Dispatcher { + constructor() { + super(); + var self = this; if (window.addEventListener !== undefined) { window.addEventListener('online', function () { self.emit('online'); @@ -4307,34 +4158,30 @@ var NetInfo = (function (_super) { self.emit('offline'); }, false); } - return _this; } - NetInfo.prototype.isOnline = function () { + isOnline() { if (window.navigator.onLine === undefined) { return true; } else { return window.navigator.onLine; } - }; - return NetInfo; -}(dispatcher)); - -var net_info_Network = new NetInfo(); + } +} +var net_info_Network = new net_info_NetInfo(); // CONCATENATED MODULE: ./src/core/transports/assistant_to_the_transport_manager.ts -var assistant_to_the_transport_manager_AssistantToTheTransportManager = (function () { - function AssistantToTheTransportManager(manager, transport, options) { +class assistant_to_the_transport_manager_AssistantToTheTransportManager { + constructor(manager, transport, options) { this.manager = manager; this.transport = transport; this.minPingDelay = options.minPingDelay; this.maxPingDelay = options.maxPingDelay; this.pingDelay = undefined; } - AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) { - var _this = this; + createConnection(name, priority, key, options) { options = extend({}, options, { activityTimeout: this.pingDelay }); @@ -4345,31 +4192,29 @@ var assistant_to_the_transport_manager_AssistantToTheTransportManager = (functio connection.bind('closed', onClosed); openTimestamp = util.now(); }; - var onClosed = function (closeEvent) { + var onClosed = closeEvent => { connection.unbind('closed', onClosed); if (closeEvent.code === 1002 || closeEvent.code === 1003) { - _this.manager.reportDeath(); + this.manager.reportDeath(); } else if (!closeEvent.wasClean && openTimestamp) { var lifespan = util.now() - openTimestamp; - if (lifespan < 2 * _this.maxPingDelay) { - _this.manager.reportDeath(); - _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay); + if (lifespan < 2 * this.maxPingDelay) { + this.manager.reportDeath(); + this.pingDelay = Math.max(lifespan / 2, this.minPingDelay); } } }; connection.bind('open', onOpen); return connection; - }; - AssistantToTheTransportManager.prototype.isSupported = function (environment) { + } + isSupported(environment) { return this.manager.isAlive() && this.transport.isSupported(environment); - }; - return AssistantToTheTransportManager; -}()); -/* harmony default export */ var assistant_to_the_transport_manager = (assistant_to_the_transport_manager_AssistantToTheTransportManager); + } +} // CONCATENATED MODULE: ./src/core/connection/protocol/protocol.ts -var Protocol = { +const Protocol = { decodeMessage: function (messageEvent) { try { var messageData = JSON.parse(messageEvent.data); @@ -4462,68 +4307,52 @@ var Protocol = { /* harmony default export */ var protocol_protocol = (Protocol); // CONCATENATED MODULE: ./src/core/connection/connection.ts -var connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_Connection = (function (_super) { - connection_extends(Connection, _super); - function Connection(id, transport) { - var _this = _super.call(this) || this; - _this.id = id; - _this.transport = transport; - _this.activityTimeout = transport.activityTimeout; - _this.bindListeners(); - return _this; +class connection_Connection extends dispatcher_Dispatcher { + constructor(id, transport) { + super(); + this.id = id; + this.transport = transport; + this.activityTimeout = transport.activityTimeout; + this.bindListeners(); } - Connection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return this.transport.handlesActivityChecks(); - }; - Connection.prototype.send = function (data) { + } + send(data) { return this.transport.send(data); - }; - Connection.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { var event = { event: name, data: data }; if (channel) { event.channel = channel; } logger.debug('Event sent', event); return this.send(protocol_protocol.encodeMessage(event)); - }; - Connection.prototype.ping = function () { + } + ping() { if (this.transport.supportsPing()) { this.transport.ping(); } else { this.send_event('pusher:ping', {}); } - }; - Connection.prototype.close = function () { + } + close() { this.transport.close(); - }; - Connection.prototype.bindListeners = function () { - var _this = this; + } + bindListeners() { var listeners = { - message: function (messageEvent) { + message: (messageEvent) => { var pusherEvent; try { pusherEvent = protocol_protocol.decodeMessage(messageEvent); } catch (e) { - _this.emit('error', { + this.emit('error', { type: 'MessageParseError', error: e, data: messageEvent.data @@ -4533,46 +4362,46 @@ var connection_Connection = (function (_super) { logger.debug('Event recd', pusherEvent); switch (pusherEvent.event) { case 'pusher:error': - _this.emit('error', { + this.emit('error', { type: 'PusherError', data: pusherEvent.data }); break; case 'pusher:ping': - _this.emit('ping'); + this.emit('ping'); break; case 'pusher:pong': - _this.emit('pong'); + this.emit('pong'); break; } - _this.emit('message', pusherEvent); + this.emit('message', pusherEvent); } }, - activity: function () { - _this.emit('activity'); + activity: () => { + this.emit('activity'); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function (closeEvent) { + closed: closeEvent => { unbindListeners(); if (closeEvent && closeEvent.code) { - _this.handleCloseEvent(closeEvent); + this.handleCloseEvent(closeEvent); } - _this.transport = null; - _this.emit('closed'); + this.transport = null; + this.emit('closed'); } }; - var unbindListeners = function () { - objectApply(listeners, function (listener, event) { - _this.transport.unbind(event, listener); + var unbindListeners = () => { + objectApply(listeners, (listener, event) => { + this.transport.unbind(event, listener); }); }; - objectApply(listeners, function (listener, event) { - _this.transport.bind(event, listener); + objectApply(listeners, (listener, event) => { + this.transport.bind(event, listener); }); - }; - Connection.prototype.handleCloseEvent = function (closeEvent) { + } + handleCloseEvent(closeEvent) { var action = protocol_protocol.getCloseAction(closeEvent); var error = protocol_protocol.getCloseError(closeEvent); if (error) { @@ -4581,136 +4410,114 @@ var connection_Connection = (function (_super) { if (action) { this.emit(action, { action: action, error: error }); } - }; - return Connection; -}(dispatcher)); -/* harmony default export */ var connection_connection = (connection_Connection); + } +} // CONCATENATED MODULE: ./src/core/connection/handshake/index.ts -var handshake_Handshake = (function () { - function Handshake(transport, callback) { +class handshake_Handshake { + constructor(transport, callback) { this.transport = transport; this.callback = callback; this.bindListeners(); } - Handshake.prototype.close = function () { + close() { this.unbindListeners(); this.transport.close(); - }; - Handshake.prototype.bindListeners = function () { - var _this = this; - this.onMessage = function (m) { - _this.unbindListeners(); + } + bindListeners() { + this.onMessage = m => { + this.unbindListeners(); var result; try { result = protocol_protocol.processHandshake(m); } catch (e) { - _this.finish('error', { error: e }); - _this.transport.close(); + this.finish('error', { error: e }); + this.transport.close(); return; } if (result.action === 'connected') { - _this.finish('connected', { - connection: new connection_connection(result.id, _this.transport), + this.finish('connected', { + connection: new connection_Connection(result.id, this.transport), activityTimeout: result.activityTimeout }); } else { - _this.finish(result.action, { error: result.error }); - _this.transport.close(); + this.finish(result.action, { error: result.error }); + this.transport.close(); } }; - this.onClosed = function (closeEvent) { - _this.unbindListeners(); + this.onClosed = closeEvent => { + this.unbindListeners(); var action = protocol_protocol.getCloseAction(closeEvent) || 'backoff'; var error = protocol_protocol.getCloseError(closeEvent); - _this.finish(action, { error: error }); + this.finish(action, { error: error }); }; this.transport.bind('message', this.onMessage); this.transport.bind('closed', this.onClosed); - }; - Handshake.prototype.unbindListeners = function () { + } + unbindListeners() { this.transport.unbind('message', this.onMessage); this.transport.unbind('closed', this.onClosed); - }; - Handshake.prototype.finish = function (action, params) { + } + finish(action, params) { this.callback(extend({ transport: this.transport, action: action }, params)); - }; - return Handshake; -}()); -/* harmony default export */ var connection_handshake = (handshake_Handshake); + } +} // CONCATENATED MODULE: ./src/core/timeline/timeline_sender.ts -var timeline_sender_TimelineSender = (function () { - function TimelineSender(timeline, options) { +class timeline_sender_TimelineSender { + constructor(timeline, options) { this.timeline = timeline; this.options = options || {}; } - TimelineSender.prototype.send = function (useTLS, callback) { + send(useTLS, callback) { if (this.timeline.isEmpty()) { return; } this.timeline.send(runtime.TimelineTransport.getAgent(this, useTLS), callback); - }; - return TimelineSender; -}()); -/* harmony default export */ var timeline_sender = (timeline_sender_TimelineSender); + } +} // CONCATENATED MODULE: ./src/core/channels/channel.ts -var channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var channel_Channel = (function (_super) { - channel_extends(Channel, _super); - function Channel(name, pusher) { - var _this = _super.call(this, function (event, data) { +class channel_Channel extends dispatcher_Dispatcher { + constructor(name, pusher) { + super(function (event, data) { logger.debug('No callbacks on ' + name + ' for ' + event); - }) || this; - _this.name = name; - _this.pusher = pusher; - _this.subscribed = false; - _this.subscriptionPending = false; - _this.subscriptionCancelled = false; - return _this; - } - Channel.prototype.authorize = function (socketId, callback) { + }); + this.name = name; + this.pusher = pusher; + this.subscribed = false; + this.subscriptionPending = false; + this.subscriptionCancelled = false; + } + authorize(socketId, callback) { return callback(null, { auth: '' }); - }; - Channel.prototype.trigger = function (event, data) { + } + trigger(event, data) { if (event.indexOf('client-') !== 0) { throw new BadEventName("Event '" + event + "' does not start with 'client-'"); } if (!this.subscribed) { var suffix = url_store.buildLogSuffix('triggeringClientEvents'); - logger.warn("Client event triggered before channel 'subscription_succeeded' event . " + suffix); + logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`); } return this.pusher.send_event(event, data, this.name); - }; - Channel.prototype.disconnect = function () { + } + disconnect() { this.subscribed = false; this.subscriptionPending = false; - }; - Channel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName === 'pusher_internal:subscription_succeeded') { @@ -4723,8 +4530,8 @@ var channel_Channel = (function (_super) { var metadata = {}; this.emit(eventName, data, metadata); } - }; - Channel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -4733,91 +4540,69 @@ var channel_Channel = (function (_super) { else { this.emit('pusher:subscription_succeeded', event.data); } - }; - Channel.prototype.handleSubscriptionCountEvent = function (event) { + } + handleSubscriptionCountEvent(event) { if (event.data.subscription_count) { this.subscriptionCount = event.data.subscription_count; } this.emit('pusher:subscription_count', event.data); - }; - Channel.prototype.subscribe = function () { - var _this = this; + } + subscribe() { if (this.subscribed) { return; } this.subscriptionPending = true; this.subscriptionCancelled = false; - this.authorize(this.pusher.connection.socket_id, function (error, data) { + this.authorize(this.pusher.connection.socket_id, (error, data) => { if (error) { - _this.subscriptionPending = false; + this.subscriptionPending = false; logger.error(error.toString()); - _this.emit('pusher:subscription_error', Object.assign({}, { + this.emit('pusher:subscription_error', Object.assign({}, { type: 'AuthError', error: error.message }, error instanceof HTTPAuthError ? { status: error.status } : {})); } else { - _this.pusher.send_event('pusher:subscribe', { + this.pusher.send_event('pusher:subscribe', { auth: data.auth, channel_data: data.channel_data, - channel: _this.name + channel: this.name }); } }); - }; - Channel.prototype.unsubscribe = function () { + } + unsubscribe() { this.subscribed = false; this.pusher.send_event('pusher:unsubscribe', { channel: this.name }); - }; - Channel.prototype.cancelSubscription = function () { + } + cancelSubscription() { this.subscriptionCancelled = true; - }; - Channel.prototype.reinstateSubscription = function () { + } + reinstateSubscription() { this.subscriptionCancelled = false; - }; - return Channel; -}(dispatcher)); -/* harmony default export */ var channels_channel = (channel_Channel); + } +} // CONCATENATED MODULE: ./src/core/channels/private_channel.ts -var private_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var PrivateChannel = (function (_super) { - private_channel_extends(PrivateChannel, _super); - function PrivateChannel() { - return _super !== null && _super.apply(this, arguments) || this; - } - PrivateChannel.prototype.authorize = function (socketId, callback) { +class private_channel_PrivateChannel extends channel_Channel { + authorize(socketId, callback) { return this.pusher.config.channelAuthorizer({ channelName: this.name, socketId: socketId }, callback); - }; - return PrivateChannel; -}(channels_channel)); -/* harmony default export */ var private_channel = (PrivateChannel); + } +} // CONCATENATED MODULE: ./src/core/channels/members.ts -var members_Members = (function () { - function Members() { +class members_Members { + constructor() { this.reset(); } - Members.prototype.get = function (id) { + get(id) { if (Object.prototype.hasOwnProperty.call(this.members, id)) { return { id: id, @@ -4827,60 +4612,44 @@ var members_Members = (function () { else { return null; } - }; - Members.prototype.each = function (callback) { - var _this = this; - objectApply(this.members, function (member, id) { - callback(_this.get(id)); + } + each(callback) { + objectApply(this.members, (member, id) => { + callback(this.get(id)); }); - }; - Members.prototype.setMyID = function (id) { + } + setMyID(id) { this.myID = id; - }; - Members.prototype.onSubscription = function (subscriptionData) { + } + onSubscription(subscriptionData) { this.members = subscriptionData.presence.hash; this.count = subscriptionData.presence.count; this.me = this.get(this.myID); - }; - Members.prototype.addMember = function (memberData) { + } + addMember(memberData) { if (this.get(memberData.user_id) === null) { this.count++; } this.members[memberData.user_id] = memberData.user_info; return this.get(memberData.user_id); - }; - Members.prototype.removeMember = function (memberData) { + } + removeMember(memberData) { var member = this.get(memberData.user_id); if (member) { delete this.members[memberData.user_id]; this.count--; } return member; - }; - Members.prototype.reset = function () { + } + reset() { this.members = {}; this.count = 0; this.myID = null; this.me = null; - }; - return Members; -}()); -/* harmony default export */ var members = (members_Members); + } +} // CONCATENATED MODULE: ./src/core/channels/presence_channel.ts -var presence_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -4890,80 +4659,42 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = (undefined && undefined.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var presence_channel_PresenceChannel = (function (_super) { - presence_channel_extends(PresenceChannel, _super); - function PresenceChannel(name, pusher) { - var _this = _super.call(this, name, pusher) || this; - _this.members = new members(); - return _this; - } - PresenceChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { return __awaiter(_this, void 0, void 0, function () { - var channelData, suffix; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!!error) return [3, 3]; - authData = authData; - if (!(authData.channel_data != null)) return [3, 1]; - channelData = JSON.parse(authData.channel_data); - this.members.setMyID(channelData.user_id); - return [3, 3]; - case 1: return [4, this.pusher.user.signinDonePromise]; - case 2: - _a.sent(); - if (this.pusher.user.user_data != null) { - this.members.setMyID(this.pusher.user.user_data.id); - } - else { - suffix = url_store.buildLogSuffix('authorizationEndpoint'); - logger.error("Invalid auth response for channel '" + this.name + "', " + - ("expected 'channel_data' field. " + suffix + ", ") + - "or the user should be signed in."); - callback('Invalid auth response'); - return [2]; - } - _a.label = 3; - case 3: - callback(error, authData); - return [2]; +class presence_channel_PresenceChannel extends private_channel_PrivateChannel { + constructor(name, pusher) { + super(name, pusher); + this.members = new members_Members(); + } + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () { + if (!error) { + authData = authData; + if (authData.channel_data != null) { + var channelData = JSON.parse(authData.channel_data); + this.members.setMyID(channelData.user_id); } - }); - }); }); - }; - PresenceChannel.prototype.handleEvent = function (event) { + else { + yield this.pusher.user.signinDonePromise; + if (this.pusher.user.user_data != null) { + this.members.setMyID(this.pusher.user.user_data.id); + } + else { + let suffix = url_store.buildLogSuffix('authorizationEndpoint'); + logger.error(`Invalid auth response for channel '${this.name}', ` + + `expected 'channel_data' field. ${suffix}, ` + + `or the user should be signed in.`); + callback('Invalid auth response'); + return; + } + } + } + callback(error, authData); + })); + } + handleEvent(event) { var eventName = event.event; if (eventName.indexOf('pusher_internal:') === 0) { this.handleInternalEvent(event); @@ -4976,8 +4707,8 @@ var presence_channel_PresenceChannel = (function (_super) { } this.emit(eventName, data, metadata); } - }; - PresenceChannel.prototype.handleInternalEvent = function (event) { + } + handleInternalEvent(event) { var eventName = event.event; var data = event.data; switch (eventName) { @@ -4998,8 +4729,8 @@ var presence_channel_PresenceChannel = (function (_super) { } break; } - }; - PresenceChannel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -5009,14 +4740,12 @@ var presence_channel_PresenceChannel = (function (_super) { this.members.onSubscription(event.data); this.emit('pusher:subscription_succeeded', this.members); } - }; - PresenceChannel.prototype.disconnect = function () { + } + disconnect() { this.members.reset(); - _super.prototype.disconnect.call(this); - }; - return PresenceChannel; -}(private_channel)); -/* harmony default export */ var presence_channel = (presence_channel_PresenceChannel); + super.disconnect(); + } +} // EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js var utf8 = __webpack_require__(1); @@ -5025,64 +4754,47 @@ var utf8 = __webpack_require__(1); var base64 = __webpack_require__(0); // CONCATENATED MODULE: ./src/core/channels/encrypted_channel.ts -var encrypted_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var encrypted_channel_EncryptedChannel = (function (_super) { - encrypted_channel_extends(EncryptedChannel, _super); - function EncryptedChannel(name, pusher, nacl) { - var _this = _super.call(this, name, pusher) || this; - _this.key = null; - _this.nacl = nacl; - return _this; +class encrypted_channel_EncryptedChannel extends private_channel_PrivateChannel { + constructor(name, pusher, nacl) { + super(name, pusher); + this.key = null; + this.nacl = nacl; } - EncryptedChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => { if (error) { callback(error, authData); return; } - var sharedSecret = authData['shared_secret']; + let sharedSecret = authData['shared_secret']; if (!sharedSecret) { - callback(new Error("No shared_secret key in auth payload for encrypted channel: " + _this.name), null); + callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null); return; } - _this.key = Object(base64["decode"])(sharedSecret); + this.key = Object(base64["decode"])(sharedSecret); delete authData['shared_secret']; callback(null, authData); }); - }; - EncryptedChannel.prototype.trigger = function (event, data) { + } + trigger(event, data) { throw new UnsupportedFeature('Client events are not currently supported for encrypted channels'); - }; - EncryptedChannel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { - _super.prototype.handleEvent.call(this, event); + super.handleEvent(event); return; } this.handleEncryptedEvent(eventName, data); - }; - EncryptedChannel.prototype.handleEncryptedEvent = function (event, data) { - var _this = this; + } + handleEncryptedEvent(event, data) { if (!this.key) { logger.debug('Received encrypted event before key has been retrieved from the authEndpoint'); return; @@ -5092,98 +4804,81 @@ var encrypted_channel_EncryptedChannel = (function (_super) { data); return; } - var cipherText = Object(base64["decode"])(data.ciphertext); + let cipherText = Object(base64["decode"])(data.ciphertext); if (cipherText.length < this.nacl.secretbox.overheadLength) { - logger.error("Expected encrypted event ciphertext length to be " + this.nacl.secretbox.overheadLength + ", got: " + cipherText.length); + logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`); return; } - var nonce = Object(base64["decode"])(data.nonce); + let nonce = Object(base64["decode"])(data.nonce); if (nonce.length < this.nacl.secretbox.nonceLength) { - logger.error("Expected encrypted event nonce length to be " + this.nacl.secretbox.nonceLength + ", got: " + nonce.length); + logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`); return; } - var bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); + let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'); - this.authorize(this.pusher.connection.socket_id, function (error, authData) { + this.authorize(this.pusher.connection.socket_id, (error, authData) => { if (error) { - logger.error("Failed to make a request to the authEndpoint: " + authData + ". Unable to fetch new key, so dropping encrypted event"); + logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`); return; } - bytes = _this.nacl.secretbox.open(cipherText, nonce, _this.key); + bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { - logger.error("Failed to decrypt event with new key. Dropping encrypted event"); + logger.error(`Failed to decrypt event with new key. Dropping encrypted event`); return; } - _this.emit(event, _this.getDataToEmit(bytes)); + this.emit(event, this.getDataToEmit(bytes)); return; }); return; } this.emit(event, this.getDataToEmit(bytes)); - }; - EncryptedChannel.prototype.getDataToEmit = function (bytes) { - var raw = Object(utf8["decode"])(bytes); + } + getDataToEmit(bytes) { + let raw = Object(utf8["decode"])(bytes); try { return JSON.parse(raw); } catch (_a) { return raw; } - }; - return EncryptedChannel; -}(private_channel)); -/* harmony default export */ var encrypted_channel = (encrypted_channel_EncryptedChannel); + } +} // CONCATENATED MODULE: ./src/core/connection/connection_manager.ts -var connection_manager_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_manager_ConnectionManager = (function (_super) { - connection_manager_extends(ConnectionManager, _super); - function ConnectionManager(key, options) { - var _this = _super.call(this) || this; - _this.state = 'initialized'; - _this.connection = null; - _this.key = key; - _this.options = options; - _this.timeline = _this.options.timeline; - _this.usingTLS = _this.options.useTLS; - _this.errorCallbacks = _this.buildErrorCallbacks(); - _this.connectionCallbacks = _this.buildConnectionCallbacks(_this.errorCallbacks); - _this.handshakeCallbacks = _this.buildHandshakeCallbacks(_this.errorCallbacks); +class connection_manager_ConnectionManager extends dispatcher_Dispatcher { + constructor(key, options) { + super(); + this.state = 'initialized'; + this.connection = null; + this.key = key; + this.options = options; + this.timeline = this.options.timeline; + this.usingTLS = this.options.useTLS; + this.errorCallbacks = this.buildErrorCallbacks(); + this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks); + this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks); var Network = runtime.getNetwork(); - Network.bind('online', function () { - _this.timeline.info({ netinfo: 'online' }); - if (_this.state === 'connecting' || _this.state === 'unavailable') { - _this.retryIn(0); + Network.bind('online', () => { + this.timeline.info({ netinfo: 'online' }); + if (this.state === 'connecting' || this.state === 'unavailable') { + this.retryIn(0); } }); - Network.bind('offline', function () { - _this.timeline.info({ netinfo: 'offline' }); - if (_this.connection) { - _this.sendActivityCheck(); + Network.bind('offline', () => { + this.timeline.info({ netinfo: 'offline' }); + if (this.connection) { + this.sendActivityCheck(); } }); - _this.updateStrategy(); - return _this; + this.updateStrategy(); } - ConnectionManager.prototype.connect = function () { + connect() { if (this.connection || this.runner) { return; } @@ -5194,59 +4889,58 @@ var connection_manager_ConnectionManager = (function (_super) { this.updateState('connecting'); this.startConnecting(); this.setUnavailableTimer(); - }; - ConnectionManager.prototype.send = function (data) { + } + send(data) { if (this.connection) { return this.connection.send(data); } else { return false; } - }; - ConnectionManager.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { if (this.connection) { return this.connection.send_event(name, data, channel); } else { return false; } - }; - ConnectionManager.prototype.disconnect = function () { + } + disconnect() { this.disconnectInternally(); this.updateState('disconnected'); - }; - ConnectionManager.prototype.isUsingTLS = function () { + } + isUsingTLS() { return this.usingTLS; - }; - ConnectionManager.prototype.startConnecting = function () { - var _this = this; - var callback = function (error, handshake) { + } + startConnecting() { + var callback = (error, handshake) => { if (error) { - _this.runner = _this.strategy.connect(0, callback); + this.runner = this.strategy.connect(0, callback); } else { if (handshake.action === 'error') { - _this.emit('error', { + this.emit('error', { type: 'HandshakeError', error: handshake.error }); - _this.timeline.error({ handshakeError: handshake.error }); + this.timeline.error({ handshakeError: handshake.error }); } else { - _this.abortConnecting(); - _this.handshakeCallbacks[handshake.action](handshake); + this.abortConnecting(); + this.handshakeCallbacks[handshake.action](handshake); } } }; this.runner = this.strategy.connect(0, callback); - }; - ConnectionManager.prototype.abortConnecting = function () { + } + abortConnecting() { if (this.runner) { this.runner.abort(); this.runner = null; } - }; - ConnectionManager.prototype.disconnectInternally = function () { + } + disconnectInternally() { this.abortConnecting(); this.clearRetryTimer(); this.clearUnavailableTimer(); @@ -5254,136 +4948,129 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.abandonConnection(); connection.close(); } - }; - ConnectionManager.prototype.updateStrategy = function () { + } + updateStrategy() { this.strategy = this.options.getStrategy({ key: this.key, timeline: this.timeline, useTLS: this.usingTLS }); - }; - ConnectionManager.prototype.retryIn = function (delay) { - var _this = this; + } + retryIn(delay) { this.timeline.info({ action: 'retry', delay: delay }); if (delay > 0) { this.emit('connecting_in', Math.round(delay / 1000)); } - this.retryTimer = new OneOffTimer(delay || 0, function () { - _this.disconnectInternally(); - _this.connect(); + this.retryTimer = new timers_OneOffTimer(delay || 0, () => { + this.disconnectInternally(); + this.connect(); }); - }; - ConnectionManager.prototype.clearRetryTimer = function () { + } + clearRetryTimer() { if (this.retryTimer) { this.retryTimer.ensureAborted(); this.retryTimer = null; } - }; - ConnectionManager.prototype.setUnavailableTimer = function () { - var _this = this; - this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, function () { - _this.updateState('unavailable'); + } + setUnavailableTimer() { + this.unavailableTimer = new timers_OneOffTimer(this.options.unavailableTimeout, () => { + this.updateState('unavailable'); }); - }; - ConnectionManager.prototype.clearUnavailableTimer = function () { + } + clearUnavailableTimer() { if (this.unavailableTimer) { this.unavailableTimer.ensureAborted(); } - }; - ConnectionManager.prototype.sendActivityCheck = function () { - var _this = this; + } + sendActivityCheck() { this.stopActivityCheck(); this.connection.ping(); - this.activityTimer = new OneOffTimer(this.options.pongTimeout, function () { - _this.timeline.error({ pong_timed_out: _this.options.pongTimeout }); - _this.retryIn(0); + this.activityTimer = new timers_OneOffTimer(this.options.pongTimeout, () => { + this.timeline.error({ pong_timed_out: this.options.pongTimeout }); + this.retryIn(0); }); - }; - ConnectionManager.prototype.resetActivityCheck = function () { - var _this = this; + } + resetActivityCheck() { this.stopActivityCheck(); if (this.connection && !this.connection.handlesActivityChecks()) { - this.activityTimer = new OneOffTimer(this.activityTimeout, function () { - _this.sendActivityCheck(); + this.activityTimer = new timers_OneOffTimer(this.activityTimeout, () => { + this.sendActivityCheck(); }); } - }; - ConnectionManager.prototype.stopActivityCheck = function () { + } + stopActivityCheck() { if (this.activityTimer) { this.activityTimer.ensureAborted(); } - }; - ConnectionManager.prototype.buildConnectionCallbacks = function (errorCallbacks) { - var _this = this; + } + buildConnectionCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - message: function (message) { - _this.resetActivityCheck(); - _this.emit('message', message); + message: message => { + this.resetActivityCheck(); + this.emit('message', message); }, - ping: function () { - _this.send_event('pusher:pong', {}); + ping: () => { + this.send_event('pusher:pong', {}); }, - activity: function () { - _this.resetActivityCheck(); + activity: () => { + this.resetActivityCheck(); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function () { - _this.abandonConnection(); - if (_this.shouldRetry()) { - _this.retryIn(1000); + closed: () => { + this.abandonConnection(); + if (this.shouldRetry()) { + this.retryIn(1000); } } }); - }; - ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) { - var _this = this; + } + buildHandshakeCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - connected: function (handshake) { - _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); - _this.clearUnavailableTimer(); - _this.setConnection(handshake.connection); - _this.socket_id = _this.connection.id; - _this.updateState('connected', { socket_id: _this.socket_id }); + connected: (handshake) => { + this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); + this.clearUnavailableTimer(); + this.setConnection(handshake.connection); + this.socket_id = this.connection.id; + this.updateState('connected', { socket_id: this.socket_id }); } }); - }; - ConnectionManager.prototype.buildErrorCallbacks = function () { - var _this = this; - var withErrorEmitted = function (callback) { - return function (result) { + } + buildErrorCallbacks() { + let withErrorEmitted = callback => { + return (result) => { if (result.error) { - _this.emit('error', { type: 'WebSocketError', error: result.error }); + this.emit('error', { type: 'WebSocketError', error: result.error }); } callback(result); }; }; return { - tls_only: withErrorEmitted(function () { - _this.usingTLS = true; - _this.updateStrategy(); - _this.retryIn(0); + tls_only: withErrorEmitted(() => { + this.usingTLS = true; + this.updateStrategy(); + this.retryIn(0); }), - refused: withErrorEmitted(function () { - _this.disconnect(); + refused: withErrorEmitted(() => { + this.disconnect(); }), - backoff: withErrorEmitted(function () { - _this.retryIn(1000); + backoff: withErrorEmitted(() => { + this.retryIn(1000); }), - retry: withErrorEmitted(function () { - _this.retryIn(0); + retry: withErrorEmitted(() => { + this.retryIn(0); }) }; - }; - ConnectionManager.prototype.setConnection = function (connection) { + } + setConnection(connection) { this.connection = connection; for (var event in this.connectionCallbacks) { this.connection.bind(event, this.connectionCallbacks[event]); } this.resetActivityCheck(); - }; - ConnectionManager.prototype.abandonConnection = function () { + } + abandonConnection() { if (!this.connection) { return; } @@ -5394,8 +5081,8 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.connection; this.connection = null; return connection; - }; - ConnectionManager.prototype.updateState = function (newState, data) { + } + updateState(newState, data) { var previousState = this.state; this.state = newState; if (previousState !== newState) { @@ -5408,56 +5095,52 @@ var connection_manager_ConnectionManager = (function (_super) { this.emit('state_change', { previous: previousState, current: newState }); this.emit(newState, data); } - }; - ConnectionManager.prototype.shouldRetry = function () { + } + shouldRetry() { return this.state === 'connecting' || this.state === 'connected'; - }; - return ConnectionManager; -}(dispatcher)); -/* harmony default export */ var connection_manager = (connection_manager_ConnectionManager); + } +} // CONCATENATED MODULE: ./src/core/channels/channels.ts -var channels_Channels = (function () { - function Channels() { +class channels_Channels { + constructor() { this.channels = {}; } - Channels.prototype.add = function (name, pusher) { + add(name, pusher) { if (!this.channels[name]) { this.channels[name] = createChannel(name, pusher); } return this.channels[name]; - }; - Channels.prototype.all = function () { + } + all() { return values(this.channels); - }; - Channels.prototype.find = function (name) { + } + find(name) { return this.channels[name]; - }; - Channels.prototype.remove = function (name) { + } + remove(name) { var channel = this.channels[name]; delete this.channels[name]; return channel; - }; - Channels.prototype.disconnect = function () { + } + disconnect() { objectApply(this.channels, function (channel) { channel.disconnect(); }); - }; - return Channels; -}()); -/* harmony default export */ var channels = (channels_Channels); + } +} function createChannel(name, pusher) { if (name.indexOf('private-encrypted-') === 0) { if (pusher.config.nacl) { return factory.createEncryptedChannel(name, pusher, pusher.config.nacl); } - var errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; - var suffix = url_store.buildLogSuffix('encryptedChannelSupport'); - throw new UnsupportedFeature(errMsg + ". " + suffix); + let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; + let suffix = url_store.buildLogSuffix('encryptedChannelSupport'); + throw new UnsupportedFeature(`${errMsg}. ${suffix}`); } else if (name.indexOf('private-') === 0) { return factory.createPrivateChannel(name, pusher); @@ -5484,97 +5167,94 @@ function createChannel(name, pusher) { var Factory = { - createChannels: function () { - return new channels(); + createChannels() { + return new channels_Channels(); }, - createConnectionManager: function (key, options) { - return new connection_manager(key, options); + createConnectionManager(key, options) { + return new connection_manager_ConnectionManager(key, options); }, - createChannel: function (name, pusher) { - return new channels_channel(name, pusher); + createChannel(name, pusher) { + return new channel_Channel(name, pusher); }, - createPrivateChannel: function (name, pusher) { - return new private_channel(name, pusher); + createPrivateChannel(name, pusher) { + return new private_channel_PrivateChannel(name, pusher); }, - createPresenceChannel: function (name, pusher) { - return new presence_channel(name, pusher); + createPresenceChannel(name, pusher) { + return new presence_channel_PresenceChannel(name, pusher); }, - createEncryptedChannel: function (name, pusher, nacl) { - return new encrypted_channel(name, pusher, nacl); + createEncryptedChannel(name, pusher, nacl) { + return new encrypted_channel_EncryptedChannel(name, pusher, nacl); }, - createTimelineSender: function (timeline, options) { - return new timeline_sender(timeline, options); + createTimelineSender(timeline, options) { + return new timeline_sender_TimelineSender(timeline, options); }, - createHandshake: function (transport, callback) { - return new connection_handshake(transport, callback); + createHandshake(transport, callback) { + return new handshake_Handshake(transport, callback); }, - createAssistantToTheTransportManager: function (manager, transport, options) { - return new assistant_to_the_transport_manager(manager, transport, options); + createAssistantToTheTransportManager(manager, transport, options) { + return new assistant_to_the_transport_manager_AssistantToTheTransportManager(manager, transport, options); } }; /* harmony default export */ var factory = (Factory); // CONCATENATED MODULE: ./src/core/transports/transport_manager.ts -var transport_manager_TransportManager = (function () { - function TransportManager(options) { +class transport_manager_TransportManager { + constructor(options) { this.options = options || {}; this.livesLeft = this.options.lives || Infinity; } - TransportManager.prototype.getAssistant = function (transport) { + getAssistant(transport) { return factory.createAssistantToTheTransportManager(this, transport, { minPingDelay: this.options.minPingDelay, maxPingDelay: this.options.maxPingDelay }); - }; - TransportManager.prototype.isAlive = function () { + } + isAlive() { return this.livesLeft > 0; - }; - TransportManager.prototype.reportDeath = function () { + } + reportDeath() { this.livesLeft -= 1; - }; - return TransportManager; -}()); -/* harmony default export */ var transport_manager = (transport_manager_TransportManager); + } +} // CONCATENATED MODULE: ./src/core/strategies/sequential_strategy.ts -var sequential_strategy_SequentialStrategy = (function () { - function SequentialStrategy(strategies, options) { +class sequential_strategy_SequentialStrategy { + constructor(strategies, options) { this.strategies = strategies; this.loop = Boolean(options.loop); this.failFast = Boolean(options.failFast); this.timeout = options.timeout; this.timeoutLimit = options.timeoutLimit; } - SequentialStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - SequentialStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { var strategies = this.strategies; var current = 0; var timeout = this.timeout; var runner = null; - var tryNextStrategy = function (error, handshake) { + var tryNextStrategy = (error, handshake) => { if (handshake) { callback(null, handshake); } else { current = current + 1; - if (_this.loop) { + if (this.loop) { current = current % strategies.length; } if (current < strategies.length) { if (timeout) { timeout = timeout * 2; - if (_this.timeoutLimit) { - timeout = Math.min(timeout, _this.timeoutLimit); + if (this.timeoutLimit) { + timeout = Math.min(timeout, this.timeoutLimit); } } - runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy); + runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy); } else { callback(true); @@ -5593,12 +5273,12 @@ var sequential_strategy_SequentialStrategy = (function () { } } }; - }; - SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) { + } + tryStrategy(strategy, minPriority, options, callback) { var timer = null; var runner = null; if (options.timeout > 0) { - timer = new OneOffTimer(options.timeout, function () { + timer = new timers_OneOffTimer(options.timeout, function () { runner.abort(); callback(true); }); @@ -5623,22 +5303,20 @@ var sequential_strategy_SequentialStrategy = (function () { runner.forceMinPriority(p); } }; - }; - return SequentialStrategy; -}()); -/* harmony default export */ var sequential_strategy = (sequential_strategy_SequentialStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/best_connected_ever_strategy.ts -var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { - function BestConnectedEverStrategy(strategies) { +class best_connected_ever_strategy_BestConnectedEverStrategy { + constructor(strategies) { this.strategies = strategies; } - BestConnectedEverStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { return connect(this.strategies, minPriority, function (i, runners) { return function (error, handshake) { runners[i].error = error; @@ -5654,10 +5332,8 @@ var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { callback(null, handshake); }; }); - }; - return BestConnectedEverStrategy; -}()); -/* harmony default export */ var best_connected_ever_strategy = (best_connected_ever_strategy_BestConnectedEverStrategy); + } +} function connect(strategies, minPriority, callbackBuilder) { var runners = map(strategies, function (strategy, i, _, rs) { return strategy.connect(minPriority, callbackBuilder(i, rs)); @@ -5690,18 +5366,18 @@ function abortRunner(runner) { -var cached_strategy_CachedStrategy = (function () { - function CachedStrategy(strategy, transports, options) { +class cached_strategy_CachedStrategy { + constructor(strategy, transports, options) { this.strategy = strategy; this.transports = transports; this.ttl = options.ttl || 1800 * 1000; this.usingTLS = options.useTLS; this.timeline = options.timeline; } - CachedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - CachedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var usingTLS = this.usingTLS; var info = fetchTransportCache(usingTLS); var strategies = [this.strategy]; @@ -5713,7 +5389,7 @@ var cached_strategy_CachedStrategy = (function () { transport: info.transport, latency: info.latency }); - strategies.push(new sequential_strategy([transport], { + strategies.push(new sequential_strategy_SequentialStrategy([transport], { timeout: info.latency * 2 + 1000, failFast: true })); @@ -5749,10 +5425,8 @@ var cached_strategy_CachedStrategy = (function () { } } }; - }; - return CachedStrategy; -}()); -/* harmony default export */ var cached_strategy = (cached_strategy_CachedStrategy); + } +} function getTransportCacheKey(usingTLS) { return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS'); } @@ -5798,19 +5472,18 @@ function flushTransportCache(usingTLS) { // CONCATENATED MODULE: ./src/core/strategies/delayed_strategy.ts -var delayed_strategy_DelayedStrategy = (function () { - function DelayedStrategy(strategy, _a) { - var number = _a.delay; +class delayed_strategy_DelayedStrategy { + constructor(strategy, { delay: number }) { this.strategy = strategy; this.options = { delay: number }; } - DelayedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - DelayedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var strategy = this.strategy; var runner; - var timer = new OneOffTimer(this.options.delay, function () { + var timer = new timers_OneOffTimer(this.options.delay, function () { runner = strategy.connect(minPriority, callback); }); return { @@ -5827,39 +5500,35 @@ var delayed_strategy_DelayedStrategy = (function () { } } }; - }; - return DelayedStrategy; -}()); -/* harmony default export */ var delayed_strategy = (delayed_strategy_DelayedStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/if_strategy.ts -var IfStrategy = (function () { - function IfStrategy(test, trueBranch, falseBranch) { +class IfStrategy { + constructor(test, trueBranch, falseBranch) { this.test = test; this.trueBranch = trueBranch; this.falseBranch = falseBranch; } - IfStrategy.prototype.isSupported = function () { + isSupported() { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.isSupported(); - }; - IfStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.connect(minPriority, callback); - }; - return IfStrategy; -}()); -/* harmony default export */ var if_strategy = (IfStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/first_connected_strategy.ts -var FirstConnectedStrategy = (function () { - function FirstConnectedStrategy(strategy) { +class FirstConnectedStrategy { + constructor(strategy) { this.strategy = strategy; } - FirstConnectedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - FirstConnectedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var runner = this.strategy.connect(minPriority, function (error, handshake) { if (handshake) { runner.abort(); @@ -5867,10 +5536,8 @@ var FirstConnectedStrategy = (function () { callback(error, handshake); }); return runner; - }; - return FirstConnectedStrategy; -}()); -/* harmony default export */ var first_connected_strategy = (FirstConnectedStrategy); + } +} // CONCATENATED MODULE: ./src/runtimes/web/default_strategy.ts @@ -5910,12 +5577,12 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { timeout: 15000, timeoutLimit: 60000 }; - var ws_manager = new transport_manager({ + var ws_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout }); - var streaming_manager = new transport_manager({ + var streaming_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout @@ -5927,37 +5594,37 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { var xdr_streaming_transport = defineTransportStrategy('xdr_streaming', 'xdr_streaming', 1, sockjs_options, streaming_manager); var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, sockjs_options); var xdr_polling_transport = defineTransportStrategy('xdr_polling', 'xdr_polling', 1, sockjs_options); - var ws_loop = new sequential_strategy([ws_transport], timeouts); - var wss_loop = new sequential_strategy([wss_transport], timeouts); - var sockjs_loop = new sequential_strategy([sockjs_transport], timeouts); - var streaming_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport) + var ws_loop = new sequential_strategy_SequentialStrategy([ws_transport], timeouts); + var wss_loop = new sequential_strategy_SequentialStrategy([wss_transport], timeouts); + var sockjs_loop = new sequential_strategy_SequentialStrategy([sockjs_transport], timeouts); + var streaming_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport) ], timeouts); - var polling_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport) + var polling_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport) ], timeouts); - var http_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy([ + var http_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy_BestConnectedEverStrategy([ streaming_loop, - new delayed_strategy(polling_loop, { delay: 4000 }) + new delayed_strategy_DelayedStrategy(polling_loop, { delay: 4000 }) ]), polling_loop) ], timeouts); - var http_fallback_loop = new if_strategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop); + var http_fallback_loop = new IfStrategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop); var wsStrategy; if (baseOptions.useTLS) { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(http_fallback_loop, { delay: 2000 }) + new delayed_strategy_DelayedStrategy(http_fallback_loop, { delay: 2000 }) ]); } else { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(wss_loop, { delay: 2000 }), - new delayed_strategy(http_fallback_loop, { delay: 5000 }) + new delayed_strategy_DelayedStrategy(wss_loop, { delay: 2000 }), + new delayed_strategy_DelayedStrategy(http_fallback_loop, { delay: 5000 }) ]); } - return new cached_strategy(new first_connected_strategy(new if_strategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, { + return new cached_strategy_CachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, { ttl: 1800000, timeline: baseOptions.timeline, useTLS: baseOptions.useTLS @@ -6031,37 +5698,21 @@ var http_xdomain_request_hooks = { /* harmony default export */ var http_xdomain_request = (http_xdomain_request_hooks); // CONCATENATED MODULE: ./src/core/http/http_request.ts -var http_request_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MAX_BUFFER_LENGTH = 256 * 1024; -var http_request_HTTPRequest = (function (_super) { - http_request_extends(HTTPRequest, _super); - function HTTPRequest(hooks, method, url) { - var _this = _super.call(this) || this; - _this.hooks = hooks; - _this.method = method; - _this.url = url; - return _this; +const MAX_BUFFER_LENGTH = 256 * 1024; +class http_request_HTTPRequest extends dispatcher_Dispatcher { + constructor(hooks, method, url) { + super(); + this.hooks = hooks; + this.method = method; + this.url = url; } - HTTPRequest.prototype.start = function (payload) { - var _this = this; + start(payload) { this.position = 0; this.xhr = this.hooks.getRequest(this); - this.unloader = function () { - _this.close(); + this.unloader = () => { + this.close(); }; runtime.addUnloadListener(this.unloader); this.xhr.open(this.method, this.url, true); @@ -6069,8 +5720,8 @@ var http_request_HTTPRequest = (function (_super) { this.xhr.setRequestHeader('Content-Type', 'application/json'); } this.xhr.send(payload); - }; - HTTPRequest.prototype.close = function () { + } + close() { if (this.unloader) { runtime.removeUnloadListener(this.unloader); this.unloader = null; @@ -6079,8 +5730,8 @@ var http_request_HTTPRequest = (function (_super) { this.hooks.abortRequest(this.xhr); this.xhr = null; } - }; - HTTPRequest.prototype.onChunk = function (status, data) { + } + onChunk(status, data) { while (true) { var chunk = this.advanceBuffer(data); if (chunk) { @@ -6093,8 +5744,8 @@ var http_request_HTTPRequest = (function (_super) { if (this.isBufferTooLong(data)) { this.emit('buffer_too_long'); } - }; - HTTPRequest.prototype.advanceBuffer = function (buffer) { + } + advanceBuffer(buffer) { var unreadData = buffer.slice(this.position); var endOfLinePosition = unreadData.indexOf('\n'); if (endOfLinePosition !== -1) { @@ -6104,13 +5755,11 @@ var http_request_HTTPRequest = (function (_super) { else { return null; } - }; - HTTPRequest.prototype.isBufferTooLong = function (buffer) { + } + isBufferTooLong(buffer) { return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH; - }; - return HTTPRequest; -}(dispatcher)); -/* harmony default export */ var http_request = (http_request_HTTPRequest); + } +} // CONCATENATED MODULE: ./src/core/http/state.ts var State; @@ -6126,24 +5775,24 @@ var State; var autoIncrement = 1; -var http_socket_HTTPSocket = (function () { - function HTTPSocket(hooks, url) { +class http_socket_HTTPSocket { + constructor(hooks, url) { this.hooks = hooks; this.session = randomNumber(1000) + '/' + randomString(8); this.location = getLocation(url); this.readyState = state.CONNECTING; this.openStream(); } - HTTPSocket.prototype.send = function (payload) { + send(payload) { return this.sendRaw(JSON.stringify([payload])); - }; - HTTPSocket.prototype.ping = function () { + } + ping() { this.hooks.sendHeartbeat(this); - }; - HTTPSocket.prototype.close = function (code, reason) { + } + close(code, reason) { this.onClose(code, reason, true); - }; - HTTPSocket.prototype.sendRaw = function (payload) { + } + sendRaw(payload) { if (this.readyState === state.OPEN) { try { runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload); @@ -6156,12 +5805,12 @@ var http_socket_HTTPSocket = (function () { else { return false; } - }; - HTTPSocket.prototype.reconnect = function () { + } + reconnect() { this.closeStream(); this.openStream(); - }; - HTTPSocket.prototype.onClose = function (code, reason, wasClean) { + } + onClose(code, reason, wasClean) { this.closeStream(); this.readyState = state.CLOSED; if (this.onclose) { @@ -6171,8 +5820,8 @@ var http_socket_HTTPSocket = (function () { wasClean: wasClean }); } - }; - HTTPSocket.prototype.onChunk = function (chunk) { + } + onChunk(chunk) { if (chunk.status !== 200) { return; } @@ -6204,8 +5853,8 @@ var http_socket_HTTPSocket = (function () { this.onClose(payload[0], payload[1], true); break; } - }; - HTTPSocket.prototype.onOpen = function (options) { + } + onOpen(options) { if (this.readyState === state.CONNECTING) { if (options && options.hostname) { this.location.base = replaceHost(this.location.base, options.hostname); @@ -6218,53 +5867,51 @@ var http_socket_HTTPSocket = (function () { else { this.onClose(1006, 'Server lost session', true); } - }; - HTTPSocket.prototype.onEvent = function (event) { + } + onEvent(event) { if (this.readyState === state.OPEN && this.onmessage) { this.onmessage({ data: event }); } - }; - HTTPSocket.prototype.onActivity = function () { + } + onActivity() { if (this.onactivity) { this.onactivity(); } - }; - HTTPSocket.prototype.onError = function (error) { + } + onError(error) { if (this.onerror) { this.onerror(error); } - }; - HTTPSocket.prototype.openStream = function () { - var _this = this; + } + openStream() { this.stream = runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))); - this.stream.bind('chunk', function (chunk) { - _this.onChunk(chunk); + this.stream.bind('chunk', chunk => { + this.onChunk(chunk); }); - this.stream.bind('finished', function (status) { - _this.hooks.onFinished(_this, status); + this.stream.bind('finished', status => { + this.hooks.onFinished(this, status); }); - this.stream.bind('buffer_too_long', function () { - _this.reconnect(); + this.stream.bind('buffer_too_long', () => { + this.reconnect(); }); try { this.stream.start(); } catch (error) { - util.defer(function () { - _this.onError(error); - _this.onClose(1006, 'Could not start streaming', false); + util.defer(() => { + this.onError(error); + this.onClose(1006, 'Could not start streaming', false); }); } - }; - HTTPSocket.prototype.closeStream = function () { + } + closeStream() { if (this.stream) { this.stream.unbind_all(); this.stream.close(); this.stream = null; } - }; - return HTTPSocket; -}()); + } +} function getLocation(url) { var parts = /([^\?]*)\/*(\??.*)/.exec(url); return { @@ -6371,20 +6018,20 @@ var http_xhr_request_hooks = { var HTTP = { - createStreamingSocket: function (url) { + createStreamingSocket(url) { return this.createSocket(http_streaming_socket, url); }, - createPollingSocket: function (url) { + createPollingSocket(url) { return this.createSocket(http_polling_socket, url); }, - createSocket: function (hooks, url) { + createSocket(hooks, url) { return new http_socket(hooks, url); }, - createXHR: function (method, url) { + createXHR(method, url) { return this.createRequest(http_xhr_request, method, url); }, - createRequest: function (hooks, method, url) { - return new http_request(hooks, method, url); + createRequest(hooks, method, url) { + return new http_request_HTTPRequest(hooks, method, url); } }; /* harmony default export */ var http_http = (HTTP); @@ -6420,17 +6067,16 @@ var Runtime = { transportConnectionInitializer: transport_connection_initializer, HTTPFactory: web_http_http, TimelineTransport: jsonp_timeline, - getXHRAPI: function () { + getXHRAPI() { return window.XMLHttpRequest; }, - getWebSocketAPI: function () { + getWebSocketAPI() { return window.WebSocket || window.MozWebSocket; }, - setup: function (PusherClass) { - var _this = this; + setup(PusherClass) { window.Pusher = PusherClass; - var initializeOnDocumentBody = function () { - _this.onDocumentBody(PusherClass.ready); + var initializeOnDocumentBody = () => { + this.onDocumentBody(PusherClass.ready); }; if (!window.JSON) { Dependencies.load('json2', {}, initializeOnDocumentBody); @@ -6439,33 +6085,32 @@ var Runtime = { initializeOnDocumentBody(); } }, - getDocument: function () { + getDocument() { return document; }, - getProtocol: function () { + getProtocol() { return this.getDocument().location.protocol; }, - getAuthorizers: function () { + getAuthorizers() { return { ajax: xhr_auth, jsonp: jsonp_auth }; }, - onDocumentBody: function (callback) { - var _this = this; + onDocumentBody(callback) { if (document.body) { callback(); } else { - setTimeout(function () { - _this.onDocumentBody(callback); + setTimeout(() => { + this.onDocumentBody(callback); }, 0); } }, - createJSONPRequest: function (url, data) { - return new jsonp_request(url, data); + createJSONPRequest(url, data) { + return new jsonp_request_JSONPRequest(url, data); }, - createScriptRequest: function (src) { - return new script_request(src); + createScriptRequest(src) { + return new ScriptRequest(src); }, - getLocalStorage: function () { + getLocalStorage() { try { return window.localStorage; } @@ -6473,7 +6118,7 @@ var Runtime = { return undefined; } }, - createXHR: function () { + createXHR() { if (this.getXHRAPI()) { return this.createXMLHttpRequest(); } @@ -6481,21 +6126,21 @@ var Runtime = { return this.createMicrosoftXHR(); } }, - createXMLHttpRequest: function () { + createXMLHttpRequest() { var Constructor = this.getXHRAPI(); return new Constructor(); }, - createMicrosoftXHR: function () { + createMicrosoftXHR() { return new ActiveXObject('Microsoft.XMLHTTP'); }, - getNetwork: function () { + getNetwork() { return net_info_Network; }, - createWebSocket: function (url) { + createWebSocket(url) { var Constructor = this.getWebSocketAPI(); return new Constructor(url); }, - createSocketRequest: function (method, url) { + createSocketRequest(method, url) { if (this.isXHRSupported()) { return this.HTTPFactory.createXHR(method, url); } @@ -6506,16 +6151,16 @@ var Runtime = { throw 'Cross-origin HTTP requests are not supported'; } }, - isXHRSupported: function () { + isXHRSupported() { var Constructor = this.getXHRAPI(); return (Boolean(Constructor) && new Constructor().withCredentials !== undefined); }, - isXDRSupported: function (useTLS) { + isXDRSupported(useTLS) { var protocol = useTLS ? 'https:' : 'http:'; var documentProtocol = this.getProtocol(); return (Boolean(window['XDomainRequest']) && documentProtocol === protocol); }, - addUnloadListener: function (listener) { + addUnloadListener(listener) { if (window.addEventListener !== undefined) { window.addEventListener('unload', listener, false); } @@ -6523,7 +6168,7 @@ var Runtime = { window.attachEvent('onunload', listener); } }, - removeUnloadListener: function (listener) { + removeUnloadListener(listener) { if (window.addEventListener !== undefined) { window.removeEventListener('unload', listener, false); } @@ -6531,10 +6176,10 @@ var Runtime = { window.detachEvent('onunload', listener); } }, - randomInt: function (max) { - var random = function () { - var crypto = window.crypto || window['msCrypto']; - var random = crypto.getRandomValues(new Uint32Array(1))[0]; + randomInt(max) { + const random = function () { + const crypto = window.crypto || window['msCrypto']; + const random = crypto.getRandomValues(new Uint32Array(1))[0]; return random / Math.pow(2, 32); }; return Math.floor(random() * max); @@ -6555,8 +6200,8 @@ var TimelineLevel; -var timeline_Timeline = (function () { - function Timeline(key, session, options) { +class timeline_Timeline { + constructor(key, session, options) { this.key = key; this.session = session; this.events = []; @@ -6564,28 +6209,27 @@ var timeline_Timeline = (function () { this.sent = 0; this.uniqueID = 0; } - Timeline.prototype.log = function (level, event) { + log(level, event) { if (level <= this.options.level) { this.events.push(extend({}, event, { timestamp: util.now() })); if (this.options.limit && this.events.length > this.options.limit) { this.events.shift(); } } - }; - Timeline.prototype.error = function (event) { + } + error(event) { this.log(timeline_level.ERROR, event); - }; - Timeline.prototype.info = function (event) { + } + info(event) { this.log(timeline_level.INFO, event); - }; - Timeline.prototype.debug = function (event) { + } + debug(event) { this.log(timeline_level.DEBUG, event); - }; - Timeline.prototype.isEmpty = function () { + } + isEmpty() { return this.events.length === 0; - }; - Timeline.prototype.send = function (sendfn, callback) { - var _this = this; + } + send(sendfn, callback) { var data = extend({ session: this.session, bundle: this.sent + 1, @@ -6597,43 +6241,40 @@ var timeline_Timeline = (function () { timeline: this.events }, this.options.params); this.events = []; - sendfn(data, function (error, result) { + sendfn(data, (error, result) => { if (!error) { - _this.sent++; + this.sent++; } if (callback) { callback(error, result); } }); return true; - }; - Timeline.prototype.generateUniqueID = function () { + } + generateUniqueID() { this.uniqueID++; return this.uniqueID; - }; - return Timeline; -}()); -/* harmony default export */ var timeline_timeline = (timeline_Timeline); + } +} // CONCATENATED MODULE: ./src/core/strategies/transport_strategy.ts -var transport_strategy_TransportStrategy = (function () { - function TransportStrategy(name, priority, transport, options) { +class transport_strategy_TransportStrategy { + constructor(name, priority, transport, options) { this.name = name; this.priority = priority; this.transport = transport; this.options = options || {}; } - TransportStrategy.prototype.isSupported = function () { + isSupported() { return this.transport.isSupported({ useTLS: this.options.useTLS }); - }; - TransportStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { if (!this.isSupported()) { return failAttempt(new UnsupportedStrategy(), callback); } @@ -6676,7 +6317,7 @@ var transport_strategy_TransportStrategy = (function () { transport.bind('closed', onClosed); transport.initialize(); return { - abort: function () { + abort: () => { if (connected) { return; } @@ -6688,11 +6329,11 @@ var transport_strategy_TransportStrategy = (function () { transport.close(); } }, - forceMinPriority: function (p) { + forceMinPriority: p => { if (connected) { return; } - if (_this.priority < p) { + if (this.priority < p) { if (handshake) { handshake.close(); } @@ -6702,10 +6343,8 @@ var transport_strategy_TransportStrategy = (function () { } } }; - }; - return TransportStrategy; -}()); -/* harmony default export */ var transport_strategy = (transport_strategy_TransportStrategy); + } +} function failAttempt(error, callback) { util.defer(function () { callback(error); @@ -6722,7 +6361,7 @@ function failAttempt(error, callback) { -var strategy_builder_Transports = runtime.Transports; +const { Transports: strategy_builder_Transports } = runtime; var strategy_builder_defineTransport = function (config, name, type, priority, options, manager) { var transportClass = strategy_builder_Transports[type]; if (!transportClass) { @@ -6735,7 +6374,7 @@ var strategy_builder_defineTransport = function (config, name, type, priority, o var transport; if (enabled) { options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options); - transport = new transport_strategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); + transport = new transport_strategy_TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); } else { transport = strategy_builder_UnsupportedStrategy; @@ -6776,7 +6415,7 @@ function validateOptions(options) { // CONCATENATED MODULE: ./src/core/auth/user_authenticator.ts -var composeChannelQuery = function (params, authOptions) { +const composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); for (var key in authOptions.params) { query += @@ -6786,7 +6425,7 @@ var composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -6797,12 +6436,12 @@ var composeChannelQuery = function (params, authOptions) { } return query; }; -var UserAuthenticator = function (authOptions) { +const UserAuthenticator = (authOptions) => { if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = composeChannelQuery(params, authOptions); runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.UserAuthentication, callback); }; }; @@ -6811,7 +6450,7 @@ var UserAuthenticator = function (authOptions) { // CONCATENATED MODULE: ./src/core/auth/channel_authorizer.ts -var channel_authorizer_composeChannelQuery = function (params, authOptions) { +const channel_authorizer_composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); query += '&channel_name=' + encodeURIComponent(params.channelName); for (var key in authOptions.params) { @@ -6822,7 +6461,7 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -6833,20 +6472,20 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { } return query; }; -var ChannelAuthorizer = function (authOptions) { +const ChannelAuthorizer = (authOptions) => { if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = channel_authorizer_composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = channel_authorizer_composeChannelQuery(params, authOptions); runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback); }; }; /* harmony default export */ var channel_authorizer = (ChannelAuthorizer); // CONCATENATED MODULE: ./src/core/auth/deprecated_channel_authorizer.ts -var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGenerator) { - var deprecatedAuthorizerOptions = { +const ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => { + const deprecatedAuthorizerOptions = { authTransport: authOptions.transport, authEndpoint: authOptions.endpoint, auth: { @@ -6854,32 +6493,21 @@ var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGen headers: authOptions.headers } }; - return function (params, callback) { - var channel = pusher.channel(params.channelName); - var channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); + return (params, callback) => { + const channel = pusher.channel(params.channelName); + const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); channelAuthorizer.authorize(params.socketId, callback); }; }; // CONCATENATED MODULE: ./src/core/config.ts -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; function getConfig(opts, pusher) { - var config = { + let config = { activityTimeout: opts.activityTimeout || defaults.activityTimeout, cluster: opts.cluster, httpPath: opts.httpPath || defaults.httpPath, @@ -6916,7 +6544,7 @@ function getHttpHost(opts) { return opts.httpHost; } if (opts.cluster) { - return "sockjs-" + opts.cluster + ".pusher.com"; + return `sockjs-${opts.cluster}.pusher.com`; } return defaults.httpHost; } @@ -6927,7 +6555,7 @@ function getWebsocketHost(opts) { return getWebsocketHostFromCluster(opts.cluster); } function getWebsocketHostFromCluster(cluster) { - return "ws-" + cluster + ".pusher.com"; + return `ws-${cluster}.pusher.com`; } function shouldUseTLS(opts) { if (runtime.getProtocol() === 'https:') { @@ -6948,7 +6576,7 @@ function getEnableStatsConfig(opts) { return false; } function buildUserAuthenticator(opts) { - var userAuthentication = __assign(__assign({}, defaults.userAuthentication), opts.userAuthentication); + const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication); if ('customHandler' in userAuthentication && userAuthentication['customHandler'] != null) { return userAuthentication['customHandler']; @@ -6956,9 +6584,9 @@ function buildUserAuthenticator(opts) { return user_authenticator(userAuthentication); } function buildChannelAuth(opts, pusher) { - var channelAuthorization; + let channelAuthorization; if ('channelAuthorization' in opts) { - channelAuthorization = __assign(__assign({}, defaults.channelAuthorization), opts.channelAuthorization); + channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization); } else { channelAuthorization = { @@ -6977,7 +6605,7 @@ function buildChannelAuth(opts, pusher) { return channelAuthorization; } function buildChannelAuthorizer(opts, pusher) { - var channelAuthorization = buildChannelAuth(opts, pusher); + const channelAuthorization = buildChannelAuth(opts, pusher); if ('customHandler' in channelAuthorization && channelAuthorization['customHandler'] != null) { return channelAuthorization['customHandler']; @@ -6986,134 +6614,99 @@ function buildChannelAuthorizer(opts, pusher) { } // CONCATENATED MODULE: ./src/core/watchlist.ts -var watchlist_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var watchlist_WatchlistFacade = (function (_super) { - watchlist_extends(WatchlistFacade, _super); - function WatchlistFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { - logger.debug("No callbacks on watchlist events for " + eventName); - }) || this; - _this.pusher = pusher; - _this.bindWatchlistInternalEvent(); - return _this; - } - WatchlistFacade.prototype.handleEvent = function (pusherEvent) { - var _this = this; - pusherEvent.data.events.forEach(function (watchlistEvent) { - _this.emit(watchlistEvent.name, watchlistEvent); +class watchlist_WatchlistFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { + logger.debug(`No callbacks on watchlist events for ${eventName}`); }); - }; - WatchlistFacade.prototype.bindWatchlistInternalEvent = function () { - var _this = this; - this.pusher.connection.bind('message', function (pusherEvent) { + this.pusher = pusher; + this.bindWatchlistInternalEvent(); + } + handleEvent(pusherEvent) { + pusherEvent.data.events.forEach(watchlistEvent => { + this.emit(watchlistEvent.name, watchlistEvent); + }); + } + bindWatchlistInternalEvent() { + this.pusher.connection.bind('message', pusherEvent => { var eventName = pusherEvent.event; if (eventName === 'pusher_internal:watchlist_events') { - _this.handleEvent(pusherEvent); + this.handleEvent(pusherEvent); } }); - }; - return WatchlistFacade; -}(dispatcher)); -/* harmony default export */ var watchlist = (watchlist_WatchlistFacade); + } +} // CONCATENATED MODULE: ./src/core/utils/flat_promise.ts function flatPromise() { - var resolve, reject; - var promise = new Promise(function (res, rej) { + let resolve, reject; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); - return { promise: promise, resolve: resolve, reject: reject }; + return { promise, resolve, reject }; } /* harmony default export */ var flat_promise = (flatPromise); // CONCATENATED MODULE: ./src/core/user.ts -var user_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var user_UserFacade = (function (_super) { - user_extends(UserFacade, _super); - function UserFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { +class user_UserFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { logger.debug('No callbacks on user for ' + eventName); - }) || this; - _this.signin_requested = false; - _this.user_data = null; - _this.serverToUserChannel = null; - _this.signinDonePromise = null; - _this._signinDoneResolve = null; - _this._onAuthorize = function (err, authData) { + }); + this.signin_requested = false; + this.user_data = null; + this.serverToUserChannel = null; + this.signinDonePromise = null; + this._signinDoneResolve = null; + this._onAuthorize = (err, authData) => { if (err) { - logger.warn("Error during signin: " + err); - _this._cleanup(); + logger.warn(`Error during signin: ${err}`); + this._cleanup(); return; } - _this.pusher.send_event('pusher:signin', { + this.pusher.send_event('pusher:signin', { auth: authData.auth, user_data: authData.user_data }); }; - _this.pusher = pusher; - _this.pusher.connection.bind('state_change', function (_a) { - var previous = _a.previous, current = _a.current; + this.pusher = pusher; + this.pusher.connection.bind('state_change', ({ previous, current }) => { if (previous !== 'connected' && current === 'connected') { - _this._signin(); + this._signin(); } if (previous === 'connected' && current !== 'connected') { - _this._cleanup(); - _this._newSigninPromiseIfNeeded(); + this._cleanup(); + this._newSigninPromiseIfNeeded(); } }); - _this.watchlist = new watchlist(pusher); - _this.pusher.connection.bind('message', function (event) { + this.watchlist = new watchlist_WatchlistFacade(pusher); + this.pusher.connection.bind('message', event => { var eventName = event.event; if (eventName === 'pusher:signin_success') { - _this._onSigninSuccess(event.data); + this._onSigninSuccess(event.data); } - if (_this.serverToUserChannel && - _this.serverToUserChannel.name === event.channel) { - _this.serverToUserChannel.handleEvent(event); + if (this.serverToUserChannel && + this.serverToUserChannel.name === event.channel) { + this.serverToUserChannel.handleEvent(event); } }); - return _this; } - UserFacade.prototype.signin = function () { + signin() { if (this.signin_requested) { return; } this.signin_requested = true; this._signin(); - }; - UserFacade.prototype._signin = function () { + } + _signin() { if (!this.signin_requested) { return; } @@ -7124,46 +6717,45 @@ var user_UserFacade = (function (_super) { this.pusher.config.userAuthenticator({ socketId: this.pusher.connection.socket_id }, this._onAuthorize); - }; - UserFacade.prototype._onSigninSuccess = function (data) { + } + _onSigninSuccess(data) { try { this.user_data = JSON.parse(data.user_data); } catch (e) { - logger.error("Failed parsing user data after signin: " + data.user_data); + logger.error(`Failed parsing user data after signin: ${data.user_data}`); this._cleanup(); return; } if (typeof this.user_data.id !== 'string' || this.user_data.id === '') { - logger.error("user_data doesn't contain an id. user_data: " + this.user_data); + logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`); this._cleanup(); return; } this._signinDoneResolve(); this._subscribeChannels(); - }; - UserFacade.prototype._subscribeChannels = function () { - var _this = this; - var ensure_subscribed = function (channel) { + } + _subscribeChannels() { + const ensure_subscribed = channel => { if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); } else if (!channel.subscriptionPending && - _this.pusher.connection.state === 'connected') { + this.pusher.connection.state === 'connected') { channel.subscribe(); } }; - this.serverToUserChannel = new channels_channel("#server-to-user-" + this.user_data.id, this.pusher); - this.serverToUserChannel.bind_global(function (eventName, data) { + this.serverToUserChannel = new channel_Channel(`#server-to-user-${this.user_data.id}`, this.pusher); + this.serverToUserChannel.bind_global((eventName, data) => { if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { return; } - _this.emit(eventName, data); + this.emit(eventName, data); }); ensure_subscribed(this.serverToUserChannel); - }; - UserFacade.prototype._cleanup = function () { + } + _cleanup() { this.user_data = null; if (this.serverToUserChannel) { this.serverToUserChannel.unbind_all(); @@ -7173,26 +6765,24 @@ var user_UserFacade = (function (_super) { if (this.signin_requested) { this._signinDoneResolve(); } - }; - UserFacade.prototype._newSigninPromiseIfNeeded = function () { + } + _newSigninPromiseIfNeeded() { if (!this.signin_requested) { return; } if (this.signinDonePromise && !this.signinDonePromise.done) { return; } - var _a = flat_promise(), promise = _a.promise, resolve = _a.resolve, _ = _a.reject; + const { promise, resolve, reject: _ } = flat_promise(); promise.done = false; - var setDone = function () { + const setDone = () => { promise.done = true; }; - promise.then(setDone)["catch"](setDone); + promise.then(setDone).catch(setDone); this.signinDonePromise = promise; this._signinDoneResolve = resolve; - }; - return UserFacade; -}(dispatcher)); -/* harmony default export */ var user = (user_UserFacade); + } +} // CONCATENATED MODULE: ./src/core/pusher.ts @@ -7208,19 +6798,29 @@ var user_UserFacade = (function (_super) { -var pusher_Pusher = (function () { - function Pusher(app_key, options) { - var _this = this; +class pusher_Pusher { + static ready() { + pusher_Pusher.isReady = true; + for (var i = 0, l = pusher_Pusher.instances.length; i < l; i++) { + pusher_Pusher.instances[i].connect(); + } + } + static getClientFeatures() { + return keys(filterObject({ ws: runtime.Transports.ws }, function (t) { + return t.isSupported({}); + })); + } + constructor(app_key, options) { checkAppKey(app_key); validateOptions(options); this.key = app_key; this.config = getConfig(options, this); this.channels = factory.createChannels(); - this.global_emitter = new dispatcher(); + this.global_emitter = new dispatcher_Dispatcher(); this.sessionID = runtime.randomInt(1000000000); - this.timeline = new timeline_timeline(this.key, this.sessionID, { + this.timeline = new timeline_Timeline(this.key, this.sessionID, { cluster: this.config.cluster, - features: Pusher.getClientFeatures(), + features: pusher_Pusher.getClientFeatures(), params: this.config.timelineParams || {}, limit: 50, level: timeline_level.INFO, @@ -7232,8 +6832,8 @@ var pusher_Pusher = (function () { path: '/timeline/v2/' + runtime.TimelineTransport.name }); } - var getStrategy = function (options) { - return runtime.getDefaultStrategy(_this.config, options, strategy_builder_defineTransport); + var getStrategy = (options) => { + return runtime.getDefaultStrategy(this.config, options, strategy_builder_defineTransport); }; this.connection = factory.createConnectionManager(this.key, { getStrategy: getStrategy, @@ -7243,106 +6843,95 @@ var pusher_Pusher = (function () { unavailableTimeout: this.config.unavailableTimeout, useTLS: Boolean(this.config.useTLS) }); - this.connection.bind('connected', function () { - _this.subscribeAll(); - if (_this.timelineSender) { - _this.timelineSender.send(_this.connection.isUsingTLS()); + this.connection.bind('connected', () => { + this.subscribeAll(); + if (this.timelineSender) { + this.timelineSender.send(this.connection.isUsingTLS()); } }); - this.connection.bind('message', function (event) { + this.connection.bind('message', event => { var eventName = event.event; var internal = eventName.indexOf('pusher_internal:') === 0; if (event.channel) { - var channel = _this.channel(event.channel); + var channel = this.channel(event.channel); if (channel) { channel.handleEvent(event); } } if (!internal) { - _this.global_emitter.emit(event.event, event.data); + this.global_emitter.emit(event.event, event.data); } }); - this.connection.bind('connecting', function () { - _this.channels.disconnect(); + this.connection.bind('connecting', () => { + this.channels.disconnect(); }); - this.connection.bind('disconnected', function () { - _this.channels.disconnect(); + this.connection.bind('disconnected', () => { + this.channels.disconnect(); }); - this.connection.bind('error', function (err) { + this.connection.bind('error', err => { logger.warn(err); }); - Pusher.instances.push(this); - this.timeline.info({ instances: Pusher.instances.length }); - this.user = new user(this); - if (Pusher.isReady) { + pusher_Pusher.instances.push(this); + this.timeline.info({ instances: pusher_Pusher.instances.length }); + this.user = new user_UserFacade(this); + if (pusher_Pusher.isReady) { this.connect(); } } - Pusher.ready = function () { - Pusher.isReady = true; - for (var i = 0, l = Pusher.instances.length; i < l; i++) { - Pusher.instances[i].connect(); - } - }; - Pusher.getClientFeatures = function () { - return keys(filterObject({ ws: runtime.Transports.ws }, function (t) { - return t.isSupported({}); - })); - }; - Pusher.prototype.channel = function (name) { + channel(name) { return this.channels.find(name); - }; - Pusher.prototype.allChannels = function () { + } + allChannels() { return this.channels.all(); - }; - Pusher.prototype.connect = function () { + } + connect() { this.connection.connect(); if (this.timelineSender) { if (!this.timelineSenderTimer) { var usingTLS = this.connection.isUsingTLS(); var timelineSender = this.timelineSender; - this.timelineSenderTimer = new PeriodicTimer(60000, function () { + this.timelineSenderTimer = new timers_PeriodicTimer(60000, function () { timelineSender.send(usingTLS); }); } } - }; - Pusher.prototype.disconnect = function () { + } + disconnect() { this.connection.disconnect(); if (this.timelineSenderTimer) { this.timelineSenderTimer.ensureAborted(); this.timelineSenderTimer = null; } - }; - Pusher.prototype.bind = function (event_name, callback, context) { + } + bind(event_name, callback, context) { this.global_emitter.bind(event_name, callback, context); return this; - }; - Pusher.prototype.unbind = function (event_name, callback, context) { + } + unbind(event_name, callback, context) { this.global_emitter.unbind(event_name, callback, context); return this; - }; - Pusher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_emitter.bind_global(callback); return this; - }; - Pusher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { this.global_emitter.unbind_global(callback); return this; - }; - Pusher.prototype.unbind_all = function (callback) { + } + unbind_all(callback) { this.global_emitter.unbind_all(); return this; - }; - Pusher.prototype.subscribeAll = function () { + } + subscribeAll() { var channelName; for (channelName in this.channels.channels) { if (this.channels.channels.hasOwnProperty(channelName)) { this.subscribe(channelName); } } - }; - Pusher.prototype.subscribe = function (channel_name) { + } + subscribe(channel_name) { var channel = this.channels.add(channel_name, this); if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); @@ -7352,8 +6941,8 @@ var pusher_Pusher = (function () { channel.subscribe(); } return channel; - }; - Pusher.prototype.unsubscribe = function (channel_name) { + } + unsubscribe(channel_name) { var channel = this.channels.find(channel_name); if (channel && channel.subscriptionPending) { channel.cancelSubscription(); @@ -7364,25 +6953,24 @@ var pusher_Pusher = (function () { channel.unsubscribe(); } } - }; - Pusher.prototype.send_event = function (event_name, data, channel) { + } + send_event(event_name, data, channel) { return this.connection.send_event(event_name, data, channel); - }; - Pusher.prototype.shouldUseTLS = function () { + } + shouldUseTLS() { return this.config.useTLS; - }; - Pusher.prototype.signin = function () { + } + signin() { this.user.signin(); - }; - Pusher.instances = []; - Pusher.isReady = false; - Pusher.logToConsole = false; - Pusher.Runtime = runtime; - Pusher.ScriptReceivers = runtime.ScriptReceivers; - Pusher.DependenciesReceivers = runtime.DependenciesReceivers; - Pusher.auth_callbacks = runtime.auth_callbacks; - return Pusher; -}()); + } +} +pusher_Pusher.instances = []; +pusher_Pusher.isReady = false; +pusher_Pusher.logToConsole = false; +pusher_Pusher.Runtime = runtime; +pusher_Pusher.ScriptReceivers = runtime.ScriptReceivers; +pusher_Pusher.DependenciesReceivers = runtime.DependenciesReceivers; +pusher_Pusher.auth_callbacks = runtime.auth_callbacks; /* harmony default export */ var core_pusher = (pusher_Pusher); function checkAppKey(key) { if (key === null || key === undefined) { @@ -7395,36 +6983,18 @@ runtime.setup(pusher_Pusher); var nacl_fast = __webpack_require__(2); // CONCATENATED MODULE: ./src/core/pusher-with-encryption.ts -var pusher_with_encryption_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var pusher_with_encryption_PusherWithEncryption = (function (_super) { - pusher_with_encryption_extends(PusherWithEncryption, _super); - function PusherWithEncryption(app_key, options) { - var _this = this; - core_pusher.logToConsole = PusherWithEncryption.logToConsole; - core_pusher.log = PusherWithEncryption.log; +class pusher_with_encryption_PusherWithEncryption extends core_pusher { + constructor(app_key, options) { + core_pusher.logToConsole = pusher_with_encryption_PusherWithEncryption.logToConsole; + core_pusher.log = pusher_with_encryption_PusherWithEncryption.log; validateOptions(options); options.nacl = nacl_fast; - _this = _super.call(this, app_key, options) || this; - return _this; + super(app_key, options); } - return PusherWithEncryption; -}(core_pusher)); -/* harmony default export */ var pusher_with_encryption = __webpack_exports__["default"] = (pusher_with_encryption_PusherWithEncryption); +} /***/ }) diff --git a/dist/web/pusher-with-encryption.js.map b/dist/web/pusher-with-encryption.js.map index fdaebe07e..446162406 100644 --- a/dist/web/pusher-with-encryption.js.map +++ b/dist/web/pusher-with-encryption.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/crypto (ignored)","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":"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AAI,OAAO,EAAE;gBACd,kBAAkB;gBAClB,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,IAAI,OAAO,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAjED,wBAiEC;;;;;;;AC/ID;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AA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","file":"pusher-with-encryption.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","/* (ignored) */","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/crypto (ignored)","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":"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AAI,OAAO,EAAE;gBACd,kBAAkB;gBAClB,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,IAAI,OAAO,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAjED,wBAiEC;;;;;;;AC/ID;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,KAAK;AACL,GAAG,UAAU,IAA8B;AAC3C;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,OAAO;AACP;AACA;AACA,CAAC;;AAED,CAAC,EAAE,KAA6B,kEAAkE;;;;;;;ACt1ElG,iBAAiB,mBAAO,CAAC,CAA0B;;;;;;;ACAnD,e;;;;;;;;;;;;;;ACkBO,MAAM,qBAAqB;IAKhC,YAAY,MAAc,EAAE,IAAY;QACtC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAkB;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;QAE1C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,eAAe,GAAG;YACpB,IAAI,CAAC,MAAM,EAAE;gBACX,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAChC,MAAM,GAAG,IAAI,CAAC;aACf;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,QAAwB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF;AAEM,IAAI,eAAe,GAAG,IAAI,qBAAqB,CACpD,iBAAiB,EACjB,wBAAwB,CACzB,CAAC;;;AC1BF,IAAI,QAAQ,GAAkB;IAC5B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,EAAE;IAEV,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,SAAS;IAEnB,UAAU,EAAE,kBAAkB;IAE9B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE;QAClB,QAAQ,EAAE,mBAAmB;QAC7B,SAAS,EAAE,MAAM;KAClB;IACD,oBAAoB,EAAE;QACpB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,MAAM;KAClB;IAGD,QAAQ,EAAE,sBAAQ;IAClB,SAAS,EAAE,uBAAS;IACpB,iBAAiB,EAAE,EAAiB;CACrC,CAAC;AAEa,qDAAQ,EAAC;;;AC9DW;AACL;AAkBf,MAAM,kCAAgB;IAKnC,YAAY,OAAY;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAOD,IAAI,CAAC,IAAY,EAAE,OAAY,EAAE,QAAkB;QACjD,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEhC,IAAI,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAS,KAAK;gBACjD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACtB,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAE1B,IAAI,eAAe,GAAG,UAAS,aAAa;wBAC1C,IAAI,CAAC,aAAa,EAAE;4BAClB,OAAO,CAAC,OAAO,EAAE,CAAC;yBACnB;oBACH,CAAC,CAAC;oBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACzC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;qBACtC;iBACF;YACH,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxB;IACH,CAAC;IAMD,OAAO,CAAC,OAAY;QAClB,IAAI,GAAG,CAAC;QACR,IAAI,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACxD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SAC9B;aAAM;YACL,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC7B;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9D,CAAC;IAOD,OAAO,CAAC,IAAY,EAAE,OAAY;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;IAC1E,CAAC;CACF;;;AC5FiE;AAC7B;AACc;AAE5C,IAAI,qBAAqB,GAAG,IAAI,qBAAqB,CAC1D,sBAAsB,EACtB,8BAA8B,CAC/B,CAAC;AAEK,IAAI,YAAY,GAAG,IAAI,kCAAgB,CAAC;IAC7C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;IAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;IAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;IACzB,MAAM,EAAE,QAAQ,CAAC,iBAAiB;IAClC,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC;;;ACXH,MAAM,QAAQ,GAAG;IACf,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE;QACJ,sBAAsB,EAAE;YACtB,IAAI,EAAE,gDAAgD;SACvD;QACD,qBAAqB,EAAE;YACrB,IAAI,EAAE,8CAA8C;SACrD;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,8BAA8B;SACrC;QACD,sBAAsB,EAAE;YACtB,IAAI,EAAE,qDAAqD;SAC5D;QACD,uBAAuB,EAAE;YACvB,OAAO,EACL,6GAA6G;SAChH;KACF;CACF,CAAC;AAOF,MAAM,cAAc,GAAG,UAAS,GAAW;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,CAAC,OAAO,EAAE;QAClB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;KACtB;SAAM,IAAI,MAAM,CAAC,IAAI,EAAE;QACtB,GAAG,GAAG,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;KACtC;IAED,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEa,gDAAE,cAAc,EAAE,EAAC;;;AC/ClC,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,6DAA0C;IAC1C,iEAA8C;AAChD,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;;;ACDM,MAAM,YAAa,SAAQ,KAAK;IACrC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAEM,MAAM,cAAe,SAAQ,KAAK;IACvC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAEM,MAAM,eAAgB,SAAQ,KAAK;IACxC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,uBAAwB,SAAQ,KAAK;IAChD,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,eAAgB,SAAQ,KAAK;IACxC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AACM,MAAM,aAAc,SAAQ,KAAK;IAEtC,YAAY,MAAc,EAAE,GAAY;QACtC,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;;;ACjE6B;AAGc;AAKjB;AACiB;AAE5C,MAAM,IAAI,GAAkB,UAC1B,OAAwB,EACxB,KAAa,EACb,WAAgC,EAChC,eAAgC,EAChC,QAA+B;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAG7C,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;IAC1E,KAAK,IAAI,UAAU,IAAI,WAAW,CAAC,OAAO,EAAE;QAC1C,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;KACnE;IACD,IAAI,WAAW,CAAC,eAAe,IAAI,IAAI,EAAE;QACvC,IAAI,cAAc,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;QACnD,KAAK,IAAI,UAAU,IAAI,cAAc,EAAE;YACrC,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SAC9D;KACF;IAED,GAAG,CAAC,kBAAkB,GAAG;QACvB,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE;YACxB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;gBACtB,IAAI,IAAI,CAAC;gBACT,IAAI,MAAM,GAAG,KAAK,CAAC;gBAEnB,IAAI;oBACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACpC,MAAM,GAAG,IAAI,CAAC;iBACf;gBAAC,OAAO,CAAC,EAAE;oBACV,QAAQ,CACN,IAAI,aAAa,CACf,GAAG,EACH,sBAAsB,eAAe,CAAC,QAAQ,EAAE,6DAC9C,GAAG,CAAC,YACN,EAAE,CACH,EACD,IAAI,CACL,CAAC;iBACH;gBAED,IAAI,MAAM,EAAE;oBAEV,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACtB;aACF;iBAAM;gBACL,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,QAAQ,eAAe,EAAE;oBACvB,KAAK,eAAe,CAAC,kBAAkB;wBACrC,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;wBAC3D,MAAM;oBACR,KAAK,eAAe,CAAC,oBAAoB;wBACvC,MAAM,GAAG,oEAAoE,SAAQ,CAAC,cAAc,CAClG,uBAAuB,CACxB,EAAE,CAAC;wBACJ,MAAM;iBACT;gBACD,QAAQ,CACN,IAAI,aAAa,CACf,GAAG,CAAC,MAAM,EACV,uCAAuC,eAAe,CAAC,QAAQ,EAAE,cAAc;oBAC7E,oBAAoB,GAAG,CAAC,MAAM,SAAS,WAAW,CAAC,QAAQ,KAAK,MAAM,EAAE,CAC3E,EACD,IAAI,CACL,CAAC;aACH;SACF;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEa,iDAAI,EAAC;;;ACzFL,SAAS,MAAM,CAAC,CAAM;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEvC,IAAI,QAAQ,GACV,kEAAkE,CAAC;AACrE,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,KAAK,IAAI,QAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAC,GAAG,CAAC,EAAE,QAAC,EAAE,EAAE;IAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAC,CAAC,CAAC,GAAG,QAAC,CAAC;CAChC;AAED,IAAI,OAAO,GAAG,UAAS,CAAC;IACtB,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,IAAI;QACd,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,EAAE,GAAG,KAAK;YACZ,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YACpE,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,IAAI,IAAI,GAAG,UAAS,CAAC;IACnB,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,IAAI,SAAS,GAAG,UAAS,GAAG;IAC1B,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,GAAG,GACL,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG;QACV,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;KAC9C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,IAAI,IAAI,GACN,MAAM,CAAC,IAAI;IACX,UAAS,CAAC;QACR,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;;;AC7CJ,MAAe,KAAK;IAIlB,YACE,GAAc,EACd,KAAgB,EAChB,KAAY,EACZ,QAAuB;QAEvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAMD,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7B,CAAC;IAGD,aAAa;QACX,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;IACH,CAAC;CACF;AAEc,wDAAK,EAAC;;;ACtCgB;AAKrC,SAAS,mBAAY,CAAC,KAAK;IACzB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AACD,SAAS,oBAAa,CAAC,KAAK;IAC1B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAOM,MAAM,kBAAY,SAAQ,cAAK;IACpC,YAAY,KAAY,EAAE,QAAuB;QAC/C,KAAK,CAAC,UAAU,EAAE,mBAAY,EAAE,KAAK,EAAE,UAAS,KAAK;YACnD,QAAQ,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAOM,MAAM,oBAAc,SAAQ,cAAK;IACtC,YAAY,KAAY,EAAE,QAAuB;QAC/C,KAAK,CAAC,WAAW,EAAE,oBAAa,EAAE,KAAK,EAAE,UAAS,KAAK;YACrD,QAAQ,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;;ACpC2D;AAE5D,IAAI,IAAI,GAAG;IACT,GAAG;QACD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SAC7B;IACH,CAAC;IAED,KAAK,CAAC,QAAuB;QAC3B,OAAO,IAAI,kBAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAUD,MAAM,CAAC,IAAY,EAAE,GAAG,IAAW;QACjC,IAAI,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,UAAS,MAAM;YACpB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC;IACJ,CAAC;CACF,CAAC;AAEa,6CAAI,EAAC;;;ACjCiB;AACV;AAgBpB,SAAS,MAAM,CAAI,MAAW,EAAE,GAAG,OAAc;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;YAC/B,IACE,UAAU,CAAC,QAAQ,CAAC;gBACpB,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW;gBAChC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,KAAK,MAAM,EAC3C;gBACA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzE;iBAAM;gBACL,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;aACzC;SACF;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,SAAS,SAAS;IACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB;aAAM;YACL,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;IACD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAEM,SAAS,YAAY,CAAC,KAAY,EAAE,IAAS;IAElD,IAAI,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,CAAC,CAAC,CAAC;KACX;IACD,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa,EAAE;QACpD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YACrB,OAAO,CAAC,CAAC;SACV;KACF;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAYM,SAAS,WAAW,CAAC,MAAW,EAAE,CAAW;IAClD,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YACrD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;SAC7B;KACF;AACH,CAAC;AAOM,SAAS,IAAI,CAAC,MAAW;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,WAAW,CAAC,MAAM,EAAE,UAAS,CAAC,EAAE,GAAG;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAOM,SAAS,MAAM,CAAC,MAAW;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAYM,SAAS,KAAK,CAAC,KAAY,EAAE,CAAW,EAAE,OAAa;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/C;AACH,CAAC;AAaM,SAAS,GAAG,CAAC,KAAY,EAAE,CAAW;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;KAC5C;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,SAAS,CAAC,MAAW,EAAE,CAAW;IAChD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,MAAM,CAAC,KAAY,EAAE,IAAc;IACjD,IAAI;QACF,IAAI;YACJ,UAAS,KAAK;gBACZ,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC,CAAC;IAEJ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,YAAY,CAAC,MAAc,EAAE,IAAc;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAOM,SAAS,OAAO,CAAC,MAAc;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAYM,SAAS,GAAG,CAAC,KAAY,EAAE,IAAc;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYM,SAAS,eAAG,CAAC,KAAY,EAAE,IAAc;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;YAC7B,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,SAAS,kBAAkB,CAAC,IAAI;IACrC,OAAO,SAAS,CAAC,IAAI,EAAE,UAAS,KAAK;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAClC;QACD,OAAO,kBAAkB,CAAC,MAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,SAAS,gBAAgB,CAAC,IAAS;IACxC,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAS,KAAK;QAC5C,OAAO,KAAK,KAAK,SAAS,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,GAAG,CACb,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AACf,CAAC;AAWM,SAAS,aAAa,CAAC,MAAW;IACvC,IAAI,OAAO,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,CAAC;IAEb,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,IAAI;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAEhB,QAAQ,OAAO,KAAK,EAAE;YACpB,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC;iBACb;gBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3B;iBACF;gBAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEjB,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,gBAAgB,EAAE;oBAC/D,EAAE,GAAG,EAAE,CAAC;oBACR,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;wBACpC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;qBAC/C;iBACF;qBAAM;oBACL,EAAE,GAAG,EAAE,CAAC;oBACR,KAAK,IAAI,IAAI,KAAK,EAAE;wBAClB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;4BACrD,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,EACX,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CACxC,CAAC;yBACH;qBACF;iBACF;gBACD,OAAO,EAAE,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;SAChB;IACH,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC;AAUM,SAAS,iBAAiB,CAAC,MAAW;IAC3C,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;KAC9C;AACH,CAAC;;;AChW+C;AAClB;AAE9B,MAAM,aAAM;IAAZ;QAaU,cAAS,GAAG,CAAC,OAAe,EAAE,EAAE;YACtC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC;IA8BJ,CAAC;IA9CC,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAQO,aAAa,CAAC,OAAe;QACnC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB;IACH,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;YAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC7B;IACH,CAAC;IAEO,GAAG,CACT,sBAAiD,EACjD,GAAG,IAAW;QAEd,IAAI,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,WAAM,CAAC,GAAG,EAAE;YACd,WAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACrB;aAAM,IAAI,WAAM,CAAC,YAAY,EAAE;YAC9B,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,GAAG,CAAC,OAAO,CAAC,CAAC;SACd;IACH,CAAC;CACF;AAEc,+CAAI,aAAM,EAAE,EAAC;;;ACnDK;AAUjC,IAAI,KAAK,GAAkB,UACzB,OAAgB,EAChB,KAAa,EACb,WAAgC,EAChC,eAAgC,EAChC,QAA+B;IAE/B,IACE,WAAW,CAAC,OAAO,KAAK,SAAS;QACjC,WAAW,CAAC,eAAe,IAAI,IAAI,EACnC;QACA,MAAM,CAAC,IAAI,CACT,4BAA4B,eAAe,CAAC,QAAQ,EAAE,iDAAiD,CACxG,CAAC;KACH;IAED,IAAI,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IACzD,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAE7B,IAAI,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,UAAS,IAAI;QAClD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,IAAI,aAAa,GAAG,yBAAyB,GAAG,YAAY,GAAG,IAAI,CAAC;IACpE,MAAM,CAAC,GAAG;QACR,WAAW,CAAC,QAAQ;YACpB,YAAY;YACZ,kBAAkB,CAAC,aAAa,CAAC;YACjC,GAAG;YACH,KAAK,CAAC;IAER,IAAI,IAAI,GACN,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAC;IACvE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEa,oDAAK,EAAC;;;ACvCN,MAAM,aAAa;IAKhC,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,QAAwB;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC;QAE9C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG;gBACpB,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG;gBACnB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC,CAAC;SACH;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG;gBAC/B,IACE,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ;oBACnC,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,EACrC;oBACA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACzB;YACH,CAAC,CAAC;SACH;QAGD,IACE,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;YACzB,QAAS,CAAC,WAAW;YAC3B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAClC;YACA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,KAAK,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;SACpD;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;SAC1B;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SAC9D;IACH,CAAC;IAGD,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;SACvC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjD;QACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YACnD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3D;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF;;;AClFqD;AAErB;AAgBlB,MAAM,0BAAY;IAK/B,YAAY,GAAW,EAAE,IAAS;QAChC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAMD,IAAI,CAAC,QAAwB;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,gBAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAGD,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;SACxB;IACH,CAAC;CACF;;;ACjD6B;AAEmC;AAEjE,IAAI,QAAQ,GAAG,UAAS,MAAsB,EAAE,MAAe;IAC7D,OAAO,UAAS,IAAS,EAAE,QAAkB;QAC3C,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QAClD,IAAI,GAAG,GACL,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACtE,IAAI,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEpD,IAAI,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,UAAS,KAAK,EAAE,MAAM;YAClE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,CAAC,OAAO,EAAE,CAAC;YAElB,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;gBACzB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;aAC3B;YACD,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAI,oBAAK,GAAG;IACV,IAAI,EAAE,OAAO;IACb,QAAQ;CACT,CAAC;AAEa,uEAAK,EAAC;;;ACjCc;AAGnC,SAAS,aAAa,CACpB,UAAkB,EAClB,MAAuB,EACvB,IAAY;IAEZ,IAAI,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAC9D,OAAO,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,WAAoB;IACvD,IAAI,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IACzB,IAAI,KAAK,GACP,YAAY;QACZ,QAAQ,CAAC,QAAQ;QACjB,YAAY;QACZ,WAAW;QACX,QAAQ,CAAC,OAAO;QAChB,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,IAAI,GAAG,KAAK,CAAC;AACtB,CAAC;AAEM,IAAI,EAAE,GAAc;IACzB,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACxE,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEK,IAAI,IAAI,GAAc;IAC3B,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEK,IAAI,MAAM,GAAc;IAC7B,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,UAAS,GAAW,EAAE,MAAuB;QACpD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;;;AC7CkD;AAGrC,MAAM,kCAAgB;IAGnC;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAE,OAAY;QAChD,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;YACtC,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAa,EAAE,QAAmB,EAAE,OAAa;QACtD,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,QAAQ,IAAI,OAAO,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC/C;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAChC;IACH,CAAC;IAEO,cAAc,CAAC,KAAe,EAAE,QAAkB,EAAE,OAAY;QACtE,KAAiB,CACf,KAAK,EACL,UAAS,IAAI;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAkB,CACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAC3B,UAAS,OAAO;gBACd,OAAO,CACL,CAAC,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;oBACrC,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CACzC,CAAC;YACJ,CAAC,CACF,CAAC;YACF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC9B;QACH,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,KAAe;QACxC,KAAiB,CACf,KAAK,EACL,UAAS,IAAI;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;CACF;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,GAAG,GAAG,IAAI,CAAC;AACpB,CAAC;;;AC1EmD;AAGD;AAMpC,MAAM,qBAAU;IAK7B,YAAY,WAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,kCAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,QAAkB,EAAE,OAAa;QACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,QAAkB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAkB,EAAE,QAAmB,EAAE,OAAa;QAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,QAAmB;QAC/B,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,gBAAgB,GAAG,MAAkB,CACxC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CACpB,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,IAAU,EAAE,QAAmB;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC3C;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,QAAQ,EAAE;YAGZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC3B;aAAM,IAAI,IAAI,EAAE;YAGf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;aAC7D;SACF;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACnC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;;;ACnF0B;AACyB;AACe;AACpC;AAGD;AAgCf,MAAM,wCAAoB,SAAQ,qBAAgB;IAc/D,YACE,KAAqB,EACrB,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAmC;QAEnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,8BAA8B,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC;IAMD,qBAAqB;QACnB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,CAAC;IAMD,YAAY;QACV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAMD,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI;YACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACvD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAOD,IAAI,CAAC,IAAS;QACZ,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;YAEzB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxB;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACpB;IACH,CAAC;IAEO,MAAM;QACZ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CACnB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAChD,CAAC;SACH;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IACjC,CAAC;IAEO,OAAO,CAAC,KAAK;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,OAAO,CAAC,UAAgB;QAC9B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;gBACzB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAEO,SAAS,CAAC,OAAO;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE;gBAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC;SACH;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;YAClC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;aACpC;SACF;IACH,CAAC;IAEO,WAAW,CAAC,KAAa,EAAE,MAAY;QAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,oBAAoB,CAAC;YACxB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CACH,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,oBAAoB,CAAC,OAAO;QAC1B,OAAO,MAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;;;AC9OwD;AAmB1C,MAAM,mBAAS;IAG5B,YAAY,KAAqB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAOD,WAAW,CAAC,WAAgB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAUD,gBAAgB,CACd,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAY;QAEZ,OAAO,IAAI,wCAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;CACF;;;ACrDyD;AAER;AAEI;AAGxB;AAO9B,IAAI,WAAW,GAAG,IAAI,mBAAS,CAAiB;IAC9C,IAAI,EAAE,EAAa;IACnB,qBAAqB,EAAE,KAAK;IAC5B,YAAY,EAAE,KAAK;IAEnB,aAAa,EAAE;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW,EAAE;QACX,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF,CAAC,CAAC;AAEH,IAAI,iBAAiB,GAAG;IACtB,IAAI,EAAE,IAAe;IACrB,qBAAqB,EAAE,KAAK;IAC5B,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE;QACb,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEK,IAAI,sBAAsB,GAAG,MAAkB,CACpD;IACE,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;CACF,EACD,iBAAiB,CAClB,CAAC;AACK,IAAI,oBAAoB,GAAG,MAAkB,CAClD;IACE,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;CACF,EACD,iBAAiB,CAClB,CAAC;AAEF,IAAI,gBAAgB,GAAG;IACrB,WAAW,EAAE;QACX,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;CACF,CAAC;AAGF,IAAI,qBAAqB,GAAG,IAAI,mBAAS,CACvB,CACd,MAAkB,CAAC,EAAE,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CACjE,CACF,CAAC;AAGF,IAAI,mBAAmB,GAAG,IAAI,mBAAS,CACrB,MAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAC/E,CAAC;AAEF,IAAI,UAAU,GAAoB;IAChC,EAAE,EAAE,WAAW;IACf,aAAa,EAAE,qBAAqB;IACpC,WAAW,EAAE,mBAAmB;CACjC,CAAC;AAEa,yDAAU,EAAC;;;AC5EgB;AACQ;AAEQ;AAC5B;AACqB;AACG;AAEtD,IAAI,eAAe,GAAG,IAAI,mBAAS,CAAiB;IAClD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,MAAiB;IACvB,qBAAqB,EAAE,IAAI;IAC3B,YAAY,EAAE,KAAK;IAEnB,WAAW,EAAE;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,aAAa,EAAE;QACb,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;IACrC,CAAC;IACD,SAAS,EAAE,UAAS,GAAG,EAAE,OAAO;QAC9B,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE;YAClC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YACF,kBAAkB,EAAE,OAAO,CAAC,gBAAgB;SAC7C,CAAC,CAAC;IACL,CAAC;IACD,UAAU,EAAE,UAAS,MAAM,EAAE,IAAI;QAC/B,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,IAAI;SACX,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,IAAI,gBAAgB,GAAG;IACrB,WAAW,EAAE,UAAS,WAAW;QAC/B,IAAI,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAGF,IAAI,qBAAqB,GAAG,IAAI,mBAAS,CACvB,CACd,MAAkB,CAAC,EAAE,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CACjE,CACF,CAAC;AAGF,IAAI,mBAAmB,GAAG,IAAI,mBAAS,CACrB,MAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAC/E,CAAC;AAEF,UAAU,CAAC,aAAa,GAAG,qBAAqB,CAAC;AACjD,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAC7C,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC;AAErB,oEAAU,EAAC;;;AC/D2C;AAQ9D,MAAM,gBAAQ,SAAQ,qBAAgB;IAC3C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACzC,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EACR;gBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC,EACD,KAAK,CACN,CAAC;YACF,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT;gBACE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC,EACD,KAAK,CACN,CAAC;SACH;IACH,CAAC;IAUD,QAAQ;QACN,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;SAChC;IACH,CAAC;CACF;AAEM,IAAI,gBAAO,GAAG,IAAI,gBAAO,EAAE,CAAC;;;ACjDR;AACyB;AAmBrC,MAAM,iEAA8B;IAOjD,YACE,OAAyB,EACzB,SAAoB,EACpB,OAAyB;QAEzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAYD,gBAAgB,CACd,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAe;QAEf,OAAO,GAAG,MAAkB,CAAC,EAAE,EAAE,OAAO,EAAE;YACxC,eAAe,EAAE,IAAI,CAAC,SAAS;SAChC,CAAC,CAAC;QACH,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC9C,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,OAAO,CACR,CAAC;QAEF,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,GAAG;YACX,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE;YAC1B,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtC,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;gBAExD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;aAC5B;iBAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,aAAa,EAAE;gBAEhD,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;gBAC1C,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC5D;aACF;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;IAUD,WAAW,CAAC,WAAmB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC3E,CAAC;CACF;;;ACjGD,MAAM,QAAQ,GAAG;IAgBf,aAAa,EAAE,UAAS,YAA0B;QAChD,IAAI;YACF,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;gBACvC,IAAI;oBACF,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAChD;gBAAC,OAAO,CAAC,EAAE,GAAE;aACf;YACD,IAAI,WAAW,GAAgB;gBAC7B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,eAAe;aACtB,CAAC;YACF,IAAI,WAAW,CAAC,OAAO,EAAE;gBACvB,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;aAC3C;YACD,OAAO,WAAW,CAAC;SACpB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;SACxE;IACH,CAAC;IAQD,aAAa,EAAE,UAAS,KAAkB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAgBD,gBAAgB,EAAE,UAAS,YAA0B;QACnD,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,KAAK,KAAK,+BAA+B,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAClC,MAAM,4CAA4C,CAAC;aACpD;YACD,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;gBAC1B,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI;aACtD,CAAC;SACH;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE;YAG3C,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;aACxC,CAAC;SACH;aAAM;YACL,MAAM,mBAAmB,CAAC;SAC3B;IACH,CAAC;IAYD,cAAc,EAAE,UAAS,UAAU;QACjC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YAM1B,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtD,OAAO,SAAS,CAAC;aAClB;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;SACF;aAAM,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;YACnC,OAAO,UAAU,CAAC;SACnB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,OAAO,CAAC;SAChB;aAAM;YAEL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAWD,aAAa,EAAE,UAAS,UAAU;QAChC,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;YACxD,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE;oBACJ,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO;iBACjD;aACF,CAAC;SACH;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;CACF,CAAC;AAEa,8DAAQ,EAAC;;;ACzJ4B;AACe;AACxB;AAEZ;AAmBhB,MAAM,qBAAW,SAAQ,qBAAgB;IAKtD,YAAY,EAAU,EAAE,SAA8B;QACpD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAMD,qBAAqB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAChD,CAAC;IAMD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IASD,UAAU,CAAC,IAAY,EAAE,IAAS,EAAE,OAAgB;QAClD,IAAI,KAAK,GAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,OAAO,EAAE;YACX,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SACzB;QACD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAOD,IAAI;QACF,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;SACpC;IACH,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,GAAG;YACd,OAAO,EAAE,CAAC,YAA0B,EAAE,EAAE;gBACtC,IAAI,WAAW,CAAC;gBAChB,IAAI;oBACF,WAAW,GAAG,iBAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;iBACpD;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACjB,IAAI,EAAE,mBAAmB;wBACzB,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,YAAY,CAAC,IAAI;qBACxB,CAAC,CAAC;iBACJ;gBAED,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAExC,QAAQ,WAAW,CAAC,KAAK,EAAE;wBACzB,KAAK,cAAc;4BACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gCACjB,IAAI,EAAE,aAAa;gCACnB,IAAI,EAAE,WAAW,CAAC,IAAI;6BACvB,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,aAAa;4BAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAClB,MAAM;wBACR,KAAK,aAAa;4BAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAClB,MAAM;qBACT;oBACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;iBACnC;YACH,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,KAAK,EAAE,KAAK,CAAC,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,UAAU,CAAC,EAAE;gBACnB,eAAe,EAAE,CAAC;gBAElB,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;oBACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;iBACnC;gBAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;SACF,CAAC;QAEF,IAAI,eAAe,GAAG,GAAG,EAAE;YACzB,WAAuB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,WAAuB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,UAAe;QACtC,IAAI,MAAM,GAAG,iBAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,iBAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC3B;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACrD;IACH,CAAC;CACF;;;AC9JsD;AACX;AACL;AAoBxB,MAAM,mBAAS;IAM5B,YACE,SAA8B,EAC9B,QAAoC;QAEpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,MAAM,CAAC;YACX,IAAI;gBACF,MAAM,GAAG,iBAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACvC;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACvB,OAAO;aACR;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;gBACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvB,UAAU,EAAE,IAAI,qBAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;oBACrD,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;aACxB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;YAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,MAAM,GAAG,iBAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;YAC9D,IAAI,KAAK,GAAG,iBAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,MAAc,EAAE,MAAW;QACxC,IAAI,CAAC,QAAQ,CACX,MAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAC1E,CAAC;IACJ,CAAC;CACF;;;ACrF6B;AAQf,MAAM,8BAAc;IAKjC,YAAY,QAAkB,EAAE,OAA8B;QAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,MAAe,EAAE,QAAmB;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC3B,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAChD,QAAQ,CACT,CAAC;IACJ,CAAC;CACF;;;AChCkE;AAC/B;AACL;AAIW;AAKA;AAW3B,MAAM,eAAQ,SAAQ,qBAAgB;IAQnD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,UAAS,KAAK,EAAE,IAAI;YACxB,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IAMD,SAAS,CAAC,QAAgB,EAAE,QAAsC;QAChE,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAGD,OAAO,CAAC,KAAa,EAAE,IAAS;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAClC,MAAM,IAAI,YAAmB,CAC3B,SAAS,GAAG,KAAK,GAAG,iCAAiC,CACtD,CAAC;SACH;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,CACT,0EAA0E,MAAM,EAAE,CACnF,CAAC;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IAMD,WAAW,CAAC,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,wCAAwC,EAAE;YAC1D,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;SAC9C;aAAM,IAAI,SAAS,KAAK,oCAAoC,EAAE;YAC7D,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;SAC1C;aAAM,IAAI,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YACtD,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;IACH,CAAC;IAED,gCAAgC,CAAC,KAAkB;QACjD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACxD;IACH,CAAC;IAED,4BAA4B,CAAC,KAAkB;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;SACxD;QAED,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAGD,SAAS;QACP,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAChC,CAAC,KAAmB,EAAE,IAA8B,EAAE,EAAE;YACtD,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBAIjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CACP,2BAA2B,EAC3B,MAAM,CAAC,MAAM,CACX,EAAE,EACF;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,EACD,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/D,CACF,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE;oBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,OAAO,EAAE,IAAI,CAAC,IAAI;iBACnB,CAAC,CAAC;aACJ;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAGD,WAAW;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE;YAC3C,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAGD,kBAAkB;QAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACpC,CAAC;IAGD,qBAAqB;QACnB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;CACF;;;ACjK+B;AAQjB,MAAM,8BAAe,SAAQ,eAAO;IAMjD,SAAS,CAAC,QAAgB,EAAE,QAAsC;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CACzC;YACE,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,QAAQ,EAAE,QAAQ;SACnB,EACD,QAAQ,CACT,CAAC;IACJ,CAAC;CACF;;;ACxBmD;AAGrC,MAAM,eAAO;IAM1B;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IASD,GAAG,CAAC,EAAU;QACZ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;YAC1D,OAAO;gBACL,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;aACvB,CAAC;SACH;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAMD,IAAI,CAAC,QAAkB;QACrB,WAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,OAAO,CAAC,EAAU;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAGD,cAAc,CAAC,gBAAqB;QAClC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAGD,SAAS,CAAC,UAAe;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAGD,YAAY,CAAC,UAAe;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;CACF;;;;;;;;;;;;AC/E8C;AAChB;AACC;AAEY;AAK7B,MAAM,gCAAgB,SAAQ,8BAAc;IAQzD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,eAAO,EAAE,CAAC;IAC/B,CAAC;IAOD,SAAS,CAAC,QAAgB,EAAE,QAAkB;QAC5C,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAO,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClD,IAAI,CAAC,KAAK,EAAE;gBACV,QAAQ,GAAG,QAAoC,CAAC;gBAChD,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI,EAAE;oBACjC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;iBAC3C;qBAAM;oBACL,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBACzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;wBAGtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;qBACrD;yBAAM;wBACL,IAAI,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;wBAC9D,MAAM,CAAC,KAAK,CACV,sCAAsC,IAAI,CAAC,IAAI,KAAK;4BAClD,kCAAkC,MAAM,IAAI;4BAC5C,kCAAkC,CACrC,CAAC;wBACF,QAAQ,CAAC,uBAAuB,CAAC,CAAC;wBAClC,OAAO;qBACR;iBACF;aACF;YACD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,EAAC,CAAC;IACL,CAAC;IAMD,WAAW,CAAC,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC/C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;aAClC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;IACH,CAAC;IACD,mBAAmB,CAAC,KAAkB;QACpC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,QAAQ,SAAS,EAAE;YACjB,KAAK,wCAAwC;gBAC3C,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,oCAAoC;gBACvC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,8BAA8B;gBACjC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,gCAAgC;gBACnC,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;iBACnD;gBACD,MAAM;SACT;IACH,CAAC;IAED,gCAAgC,CAAC,KAAkB;QACjD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC1D;IACH,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,UAAU,EAAE,CAAC;IACrB,CAAC;CACF;;;;;;;;;AChH8C;AACX;AACL;AAEwB;AACI;AAc5C,MAAM,kCAAiB,SAAQ,8BAAc;IAI1D,YAAY,IAAY,EAAE,MAAc,EAAE,IAAU;QAClD,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAJtB,QAAG,GAAe,IAAI,CAAC;QAKrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAOD,SAAS,CAAC,QAAgB,EAAE,QAAsC;QAChE,KAAK,CAAC,SAAS,CACb,QAAQ,EACR,CAAC,KAAmB,EAAE,QAAkC,EAAE,EAAE;YAC1D,IAAI,KAAK,EAAE;gBACT,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC1B,OAAO;aACR;YACD,IAAI,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,EAAE;gBACjB,QAAQ,CACN,IAAI,KAAK,CACP,+DAA+D,IAAI,CAAC,IAAI,EAAE,CAC3E,EACD,IAAI,CACL,CAAC;gBACF,OAAO;aACR;YACD,IAAI,CAAC,GAAG,GAAG,wBAAY,CAAC,YAAY,CAAC,CAAC;YACtC,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,IAAS;QAC9B,MAAM,IAAI,kBAAyB,CACjC,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAMD,WAAW,CAAC,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IACE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAC3C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAClC;YACA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;SACR;QACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,oBAAoB,CAAC,KAAa,EAAE,IAAS;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,KAAK,CACV,8EAA8E,CAC/E,CAAC;YACF,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnC,MAAM,CAAC,KAAK,CACV,oGAAoG;gBAClG,IAAI,CACP,CAAC;YACF,OAAO;SACR;QACD,IAAI,UAAU,GAAG,wBAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC1D,MAAM,CAAC,KAAK,CACV,oDAAoD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,UAAU,UAAU,CAAC,MAAM,EAAE,CACpH,CAAC;YACF,OAAO;SACR;QACD,IAAI,KAAK,GAAG,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAClD,MAAM,CAAC,KAAK,CACV,+CAA+C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,UAAU,KAAK,CAAC,MAAM,EAAE,CACvG,CAAC;YACF,OAAO;SACR;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,KAAK,CACV,iIAAiI,CAClI,CAAC;YAGF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACnE,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAK,CACV,iDAAiD,QAAQ,wDAAwD,CAClH,CAAC;oBACF,OAAO;iBACR;gBACD,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9D,IAAI,KAAK,KAAK,IAAI,EAAE;oBAClB,MAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;oBACF,OAAO;iBACR;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC,CAAC,CAAC;YACH,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAID,aAAa,CAAC,KAAiB;QAC7B,IAAI,GAAG,GAAG,sBAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QAAC,WAAM;YACN,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;CACF;;;ACrJkE;AACZ;AAExB;AAKqB;AAGtB;AAmCf,MAAM,oCAAkB,SAAQ,qBAAgB;IAkB7D,YAAY,GAAW,EAAE,OAAiC;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAEpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CACtD,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE5E,IAAI,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAEnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE;gBAC/D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACjB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAOD,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;YAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO;SACR;QACD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAMD,IAAI,CAAC,IAAI;QACP,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnC;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IASD,UAAU,CAAC,IAAY,EAAE,IAAS,EAAE,OAAgB;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACxD;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAClC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;aAClD;iBAAM;gBACL,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,EAAE;oBAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACjB,IAAI,EAAE,gBAAgB;wBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;qBACvB,CAAC,CAAC;oBACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC1D;qBAAM;oBACL,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;iBACtD;aACF;QACH,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,UAAU,CAAC,KAAK,EAAE,CAAC;SACpB;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,KAAK;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;SACtD;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAK,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,kBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACtE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;SACvC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,EAAE;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;gBACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;SACpC;IACH,CAAC;IAEO,wBAAwB,CAC9B,cAA8B;QAE9B,OAAO,MAAkB,CAAsB,EAAE,EAAE,cAAc,EAAE;YACjE,OAAO,EAAE,OAAO,CAAC,EAAE;gBAEjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,KAAK,CAAC,EAAE;gBAEb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;oBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACpB;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAC7B,cAA8B;QAE9B,OAAO,MAAkB,CAAqB,EAAE,EAAE,cAAc,EAAE;YAChE,SAAS,EAAE,CAAC,SAA2B,EAAE,EAAE;gBACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAC7B,IAAI,CAAC,OAAO,CAAC,eAAe,EAC5B,SAAS,CAAC,eAAe,EACzB,SAAS,CAAC,UAAU,CAAC,eAAe,IAAI,QAAQ,CACjD,CAAC;gBACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB;QACzB,IAAI,gBAAgB,GAAG,QAAQ,CAAC,EAAE;YAChC,OAAO,CAAC,MAAiC,EAAE,EAAE;gBAC3C,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;iBACrE;gBACD,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC;YACF,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC;YACF,KAAK,EAAE,gBAAgB,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,UAAU;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;SAC9D;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;SAChE;QACD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,WAAW,CAAC,QAAgB,EAAE,IAAU;QAC9C,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,aAAa,KAAK,QAAQ,EAAE;YAC9B,IAAI,mBAAmB,GAAG,QAAQ,CAAC;YACnC,IAAI,mBAAmB,KAAK,WAAW,EAAE;gBACvC,mBAAmB,IAAI,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;aAChE;YACD,MAAM,CAAC,KAAK,CACV,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,mBAAmB,CAC7C,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3B;IACH,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IACnE,CAAC;CACF;;;ACjXmD;AAEb;AAGH;AACM;AAG3B,MAAM,iBAAQ;IAG3B;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAQD,GAAG,CAAC,IAAY,EAAE,MAAc;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAMD,GAAG;QACD,OAAO,MAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAOD,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAMD,MAAM,CAAC,IAAY;QACjB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,UAAU;QACR,WAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAS,OAAO;YACrD,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;IACjD,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;QAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACtB,OAAO,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzE;QACD,IAAI,MAAM,GACR,yFAAyF,CAAC;QAC5F,IAAI,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;QAChE,MAAM,IAAI,kBAAyB,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;KAC7D;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACzC,OAAO,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACnD;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QAC1C,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACpD;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,cAAqB,CAC7B,qCAAqC,GAAG,IAAI,GAAG,IAAI,CACpD,CAAC;KACH;SAAM;QACL,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC5C;AACH,CAAC;;;ACrF6F;AAI9C;AASX;AACsB;AACF;AACI;AACnB;AACuB;AAGrB;AAK5C,IAAI,OAAO,GAAG;IACZ,cAAc;QACZ,OAAO,IAAI,iBAAQ,EAAE,CAAC;IACxB,CAAC;IAED,uBAAuB,CACrB,GAAW,EACX,OAAiC;QAEjC,OAAO,IAAI,oCAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,MAAc;QACxC,OAAO,IAAI,eAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,MAAc;QAC/C,OAAO,IAAI,8BAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,qBAAqB,CAAC,IAAY,EAAE,MAAc;QAChD,OAAO,IAAI,gCAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,sBAAsB,CACpB,IAAY,EACZ,MAAc,EACd,IAAU;QAEV,OAAO,IAAI,kCAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB,CAAC,QAAkB,EAAE,OAA8B;QACrE,OAAO,IAAI,8BAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,eAAe,CACb,SAA8B,EAC9B,QAAoC;QAEpC,OAAO,IAAI,mBAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,oCAAoC,CAClC,OAAyB,EACzB,SAAoB,EACpB,OAAyB;QAEzB,OAAO,IAAI,iEAA8B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACF,CAAC;AAEa,mDAAO,EAAC;;;AC3EgB;AAexB,MAAM,kCAAgB;IAInC,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;IAClD,CAAC;IAOD,YAAY,CAAC,SAAoB;QAC/B,OAAO,OAAO,CAAC,oCAAoC,CAAC,IAAI,EAAE,SAAS,EAAE;YACnE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAMD,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5B,CAAC;IAGD,WAAW;QACT,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACtB,CAAC;CACF;;;ACnDmD;AACzB;AAC4B;AAcxC,MAAM,sCAAkB;IAOrC,YAAY,UAAsB,EAAE,OAAwB;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,OAAO,GAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,eAAe,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YACzC,IAAI,SAAS,EAAE;gBACb,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aAC3B;iBAAM;gBACL,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;iBACvC;gBAED,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE;oBAC/B,IAAI,OAAO,EAAE;wBACX,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;wBACtB,IAAI,IAAI,CAAC,YAAY,EAAE;4BACrB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;yBAChD;qBACF;oBACD,MAAM,GAAG,IAAI,CAAC,WAAW,CACvB,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,EACX,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EACpC,eAAe,CAChB,CAAC;iBACH;qBAAM;oBACL,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAChB;aACF;QACH,CAAC,CAAC;QAEF,MAAM,GAAG,IAAI,CAAC,WAAW,CACvB,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,EACX,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAC7C,eAAe,CAChB,CAAC;QAEF,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,QAAkB,EAClB,WAAmB,EACnB,OAAwB,EACxB,QAAkB;QAElB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;YACvB,KAAK,GAAG,IAAI,kBAAK,CAAC,OAAO,CAAC,OAAO,EAAE;gBACjC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE,SAAS;YAC9D,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAE5D,OAAO;aACR;YACD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,aAAa,EAAE,CAAC;aACvB;YACD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,KAAK,EAAE;oBACT,KAAK,CAAC,aAAa,EAAE,CAAC;iBACvB;gBACD,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;IACJ,CAAC;CACF;;;AChImD;AACzB;AAOZ,MAAM,sDAAyB;IAG5C,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,WAAW;QACT,OAAO,GAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAS,CAAC,EAAE,OAAO;YAC9D,OAAO,UAAS,KAAK,EAAE,SAAS;gBAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;gBACzB,IAAI,KAAK,EAAE;oBACT,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;wBAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC;qBAChB;oBACD,OAAO;iBACR;gBACD,KAAiB,CAAC,OAAO,EAAE,UAAS,MAAM;oBACxC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAaD,SAAS,OAAO,CACd,UAAsB,EACtB,WAAmB,EACnB,eAAyB;IAEzB,IAAI,OAAO,GAAG,GAAe,CAAC,UAAU,EAAE,UAAS,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACnE,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE;YACL,KAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QACD,gBAAgB,EAAE,UAAS,CAAC;YAC1B,KAAiB,CAAC,OAAO,EAAE,UAAS,MAAM;gBACxC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAO;IAC/B,OAAO,eAAe,CAAC,OAAO,EAAE,UAAS,MAAM;QAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAAM;IACzB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACpC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;AACH,CAAC;;;AChF0B;AACG;AAEyB;AAIH;AAYrC,MAAM,8BAAc;IAOjC,YACE,QAAkB,EAClB,UAAuC,EACvC,OAAwB;QAExB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CACb,IAAI,sCAAkB,CAAC,CAAC,SAAS,CAAC,EAAE;oBAClC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI;oBAChC,QAAQ,EAAE,IAAI;iBACf,CAAC,CACH,CAAC;aACH;SACF;QAED,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,UAAU;aACpB,GAAG,EAAE;aACL,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS;YAChD,IAAI,KAAK,EAAE;gBACT,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5B,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACjB;aACF;iBAAM;gBACL,mBAAmB,CACjB,QAAQ,EACR,SAAS,CAAC,SAAS,CAAC,IAAI,EACxB,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAC5B,CAAC;gBACF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;QAEL,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,QAAiB;IAC7C,OAAO,iBAAiB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,IAAI,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9D,IAAI,eAAe,EAAE;gBACnB,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;aACpC;SACF;QAAC,OAAO,CAAC,EAAE;YACV,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAC/B;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAiB,EACjB,SAA4B,EAC5B,OAAe;IAEf,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,GAAG,iBAA6B,CAAC;gBACtE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;SAEX;KACF;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,OAAO,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAChD;QAAC,OAAO,CAAC,EAAE;SAEX;KACF;AACH,CAAC;;;ACnJsD;AAYxC,MAAM,gCAAe;IAIlC,YAAY,QAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,GAAG,IAAI,kBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACxC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE;gBACL,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,KAAK,EAAE,CAAC;iBAChB;YACH,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF;;;ACtCc,MAAM,UAAU;IAK7B,YACE,IAAmB,EACnB,UAAoB,EACpB,WAAqB;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,WAAW;QACT,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9D,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF;;;AC1Bc,MAAM,sBAAsB;IAGzC,YAAY,QAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE,SAAS;YACvE,IAAI,SAAS,EAAE;gBACb,MAAM,CAAC,KAAK,EAAE,CAAC;aAChB;YACD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;;;AC1BgE;AAGI;AACgB;AAG5C;AACsB;AACV;AACyB;AAG9E,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO;QACL,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,kBAAkB,GAAG,UACvB,MAAc,EACd,WAA4B,EAC5B,eAAyB;IAEzB,IAAI,iBAAiB,GAAgC,EAAE,CAAC;IAExD,SAAS,uBAAuB,CAC9B,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,OAAwB,EACxB,OAA0B;QAE1B,IAAI,SAAS,GAAG,eAAe,CAC7B,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,OAAO,CACR,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAEpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE;QAC/D,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM;QAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO;QAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,CAAC;IACH,IAAI,WAAW,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE;QAC/D,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,IAAI,cAAc,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE;QACnE,UAAU,EAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ;QACnD,OAAO,EAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS;QACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG;QACb,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,kCAAgB,CAAC;QACpC,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,eAAe;KACrC,CAAC,CAAC;IACH,IAAI,iBAAiB,GAAG,IAAI,kCAAgB,CAAC;QAC3C,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,uBAAuB,CACxC,IAAI,EACJ,IAAI,EACJ,CAAC,EACD,UAAU,EACV,UAAU,CACX,CAAC;IACF,IAAI,aAAa,GAAG,uBAAuB,CACzC,KAAK,EACL,IAAI,EACJ,CAAC,EACD,WAAW,EACX,UAAU,CACX,CAAC;IACF,IAAI,gBAAgB,GAAG,uBAAuB,CAC5C,QAAQ,EACR,QAAQ,EACR,CAAC,EACD,cAAc,CACf,CAAC;IACF,IAAI,uBAAuB,GAAG,uBAAuB,CACnD,eAAe,EACf,eAAe,EACf,CAAC,EACD,cAAc,EACd,iBAAiB,CAClB,CAAC;IACF,IAAI,uBAAuB,GAAG,uBAAuB,CACnD,eAAe,EACf,eAAe,EACf,CAAC,EACD,cAAc,EACd,iBAAiB,CAClB,CAAC;IACF,IAAI,qBAAqB,GAAG,uBAAuB,CACjD,aAAa,EACb,aAAa,EACb,CAAC,EACD,cAAc,CACf,CAAC;IACF,IAAI,qBAAqB,GAAG,uBAAuB,CACjD,aAAa,EACb,aAAa,EACb,CAAC,EACD,cAAc,CACf,CAAC;IAEF,IAAI,OAAO,GAAG,IAAI,sCAAkB,CAAC,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAAG,IAAI,sCAAkB,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,WAAW,GAAG,IAAI,sCAAkB,CAAC,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvE,IAAI,cAAc,GAAG,IAAI,sCAAkB,CACzC;QACE,IAAI,UAAU,CACZ,oBAAoB,CAAC,uBAAuB,CAAC,EAC7C,uBAAuB,EACvB,uBAAuB,CACxB;KACF,EACD,QAAQ,CACT,CAAC;IACF,IAAI,YAAY,GAAG,IAAI,sCAAkB,CACvC;QACE,IAAI,UAAU,CACZ,oBAAoB,CAAC,qBAAqB,CAAC,EAC3C,qBAAqB,EACrB,qBAAqB,CACtB;KACF,EACD,QAAQ,CACT,CAAC;IAEF,IAAI,SAAS,GAAG,IAAI,sCAAkB,CACpC;QACE,IAAI,UAAU,CACZ,oBAAoB,CAAC,cAAc,CAAC,EACpC,IAAI,sDAAyB,CAAC;YAC5B,cAAc;YACd,IAAI,gCAAe,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACnD,CAAC,EACF,YAAY,CACb;KACF,EACD,QAAQ,CACT,CAAC;IAEF,IAAI,kBAAkB,GAAG,IAAI,UAAU,CACrC,oBAAoB,CAAC,SAAS,CAAC,EAC/B,SAAS,EACT,WAAW,CACZ,CAAC;IAEF,IAAI,UAAU,CAAC;IACf,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,UAAU,GAAG,IAAI,sDAAyB,CAAC;YACzC,OAAO;YACP,IAAI,gCAAe,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACzD,CAAC,CAAC;KACJ;SAAM;QACL,UAAU,GAAG,IAAI,sDAAyB,CAAC;YACzC,OAAO;YACP,IAAI,gCAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9C,IAAI,gCAAe,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACzD,CAAC,CAAC;KACJ;IAED,OAAO,IAAI,8BAAc,CACvB,IAAI,sBAAsB,CACxB,IAAI,UAAU,CACZ,oBAAoB,CAAC,YAAY,CAAC,EAClC,UAAU,EACV,kBAAkB,CACnB,CACF,EACD,iBAAiB,EACjB;QACE,GAAG,EAAE,OAAO;QACZ,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CACF,CAAC;AACJ,CAAC,CAAC;AAEa,uEAAkB,EAAC;;;ACzMiB;AAMpC;IACb,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,oBAAoB,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC,CACH,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;QAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;KACjC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAC1B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACjC,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAC/B,UAAS,KAAK,EAAE,QAAQ;YACtB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAChC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAChB;iBAAM;gBACL,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBACrB;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,QAAQ,CAAC,KAAK,CAAC,CAAC;aACjB;QACH,CAAC,CACF,CAAC;KACH;SAAM;QACL,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AACH,CAAC;;;ACnCqC;AAEtC,IAAI,0BAAK,GAAiB;IACxB,UAAU,EAAE,UAAS,MAAmB;QACtC,IAAI,GAAG,GAAG,IAAU,MAAO,CAAC,cAAc,EAAE,CAAC;QAC7C,GAAG,CAAC,SAAS,GAAG;YACd,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,eAAsB,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,GAAG,CAAC,OAAO,GAAG,UAAS,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,GAAG,CAAC,UAAU,GAAG;YACf,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;aACvC;QACH,CAAC,CAAC;QACF,GAAG,CAAC,MAAM,GAAG;YACX,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;aACvC;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,YAAY,EAAE,UAAS,GAAS;QAC9B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;QACjE,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACF,CAAC;AAEa,mFAAK,EAAC;;;ACpCS;AAGqC;AAEnE,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEtB,MAAM,wBAAY,SAAQ,qBAAgB;IAQvD,YAAY,KAAmB,EAAE,MAAc,EAAE,GAAW;QAC1D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAa;QACjB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;QACF,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;SAC/D;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB;QACD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SACjB;IACH,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,IAAS;QAC/B,OAAO,IAAI,EAAE;YACX,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACrD;iBAAM;gBACL,MAAM;aACP;SACF;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9B;IACH,CAAC;IAEO,aAAa,CAAC,MAAa;QACjC,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;YAC5B,IAAI,CAAC,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;YACvC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;SAC/C;aAAM;YAEL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAEO,eAAe,CAAC,MAAW;QACjC,OAAO,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;IAC9E,CAAC;CACF;;;AChFD,IAAK,KAIJ;AAJD,WAAK,KAAK;IACR,6CAAc;IACd,iCAAQ;IACR,qCAAU;AACZ,CAAC,EAJI,KAAK,KAAL,KAAK,QAIT;AAEc,+CAAK,EAAC;;;ACLO;AAGD;AAGG;AAE9B,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,MAAM,sBAAU;IAad,YAAY,KAAkB,EAAE,GAAW;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,OAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAS,EAAE,MAAW;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAGD,OAAO,CAAC,OAAY;QAClB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,EAAE;YAClC,IAAI;gBACF,OAAO,CAAC,mBAAmB,CACzB,MAAM,EACN,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACtD,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,KAAK,CAAC;aACd;SACF;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,SAAS;QACP,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAGD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC;gBACX,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,OAAO,CAAC,KAAK;QACnB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;YACxB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,EAAE;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,QAAQ,IAAI,EAAE;YACZ,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1B;gBACD,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM;SACT;IACH,CAAC;IAEO,MAAM,CAAC,OAAO;QACpB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;YACxC,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;YAE7B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;SACF;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,OAAO,CAAC,KAAK;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACpD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACjC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;IACH,CAAC;IAEO,OAAO,CAAC,KAAK;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,mBAAmB,CACvC,MAAM,EACN,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SACrB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAG;IACtB,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAgB,EAAE,OAAe;IACnD,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,WAAW,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,GAAG,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,KAAK,GAAG,aAAa,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,QAAgB;IAChD,IAAI,QAAQ,GAAG,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5C;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAEc,sEAAU,EAAC;;;ACxN1B,IAAI,2BAAK,GAAgB;IACvB,aAAa,EAAE,UAAS,GAAG,EAAE,OAAO;QAClC,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,gBAAgB,GAAG,GAAG,CAAC,WAAW,CAAC;IACvE,CAAC;IACD,WAAW,EAAE,UAAS,MAAM;QAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,aAAa,EAAE,UAAS,MAAM;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,UAAU,EAAE,UAAS,MAAM,EAAE,MAAM;QACjC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF,CAAC;AAEa,qFAAK,EAAC;;;ACdrB,IAAI,yBAAK,GAAgB;IACvB,aAAa,EAAE,UAAS,GAAgB,EAAE,OAAe;QACvD,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7D,CAAC;IACD,WAAW,EAAE;IAEb,CAAC;IACD,aAAa,EAAE,UAAS,MAAM;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,UAAU,EAAE,UAAS,MAAM,EAAE,MAAM;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,MAAM,CAAC,SAAS,EAAE,CAAC;SACpB;aAAM;YACL,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAC;AAEa,iFAAK,EAAC;;;ACpBS;AAE9B,IAAI,sBAAK,GAAiB;IACxB,UAAU,EAAE,UAAS,MAAmB;QACtC,IAAI,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,UAAU,GAAG;YACxC,QAAQ,GAAG,CAAC,UAAU,EAAE;gBACtB,KAAK,CAAC;oBACJ,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;qBAC9C;oBACD,MAAM;gBACR,KAAK,CAAC;oBAEJ,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;qBAC9C;oBACD,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM;aACT;QACH,CAAC,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,YAAY,EAAE,UAAS,GAAS;QAC9B,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC9B,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACF,CAAC;AAEa,2EAAK,EAAC;;;AClC4B;AACF;AAGc;AACJ;AACf;AAG1C,IAAI,IAAI,GAAgB;IACtB,qBAAqB,CAAC,GAAW;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAc,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAY,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,KAAkB,EAAE,GAAW;QAC1C,OAAO,IAAI,WAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,GAAW;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,aAAa,CAAC,KAAmB,EAAE,MAAc,EAAE,GAAW;QAC5D,OAAO,IAAI,wBAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEa,kDAAI,EAAC;;;AC/B0B;AACN;AAExC,SAAI,CAAC,SAAS,GAAG,UAAS,MAAM,EAAE,GAAG;IACnC,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC,CAAC;AAEa,2DAAI,EAAC;;;ACNqD;AAE1B;AACL;AAGO;AACF;AAEiB;AACV;AACL;AAEZ;AACe;AACuC;AACrD;AAGtC,IAAI,OAAO,GAAY;IAErB,kBAAkB,EAAE,CAAC;IACrB,cAAc,EAAE,EAAE;IAClB,gCAAe;IACf,4CAAqB;IACrB,oCAAkB;IAClB,iCAAU;IACV,gEAA8B;IAC9B,0BAAW;IAEX,iBAAiB,EAAE,cAAa;IAEhC,SAAS;QACP,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,OAAO,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW;QACT,MAAO,CAAC,MAAM,GAAG,WAAW,CAAC;QACnC,IAAI,wBAAwB,GAAG,GAAG,EAAE;YAClC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC;QACF,IAAI,CAAO,MAAO,CAAC,IAAI,EAAE;YACvB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;SAC1D;aAAM;YACL,wBAAwB,EAAE,CAAC;SAC5B;IACH,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,IAAI,EAAE,QAAO,EAAE,KAAK,EAAE,UAAS,EAAE,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,QAAkB;QAC/B,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,QAAQ,EAAE,CAAC;SACZ;aAAM;YACL,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC,EAAE,CAAC,CAAC,CAAC;SACP;IACH,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,IAAS;QACvC,OAAO,IAAI,0BAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,mBAAmB,CAAC,GAAW;QAC7B,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,eAAe;QACb,IAAI;YACF,OAAO,MAAM,CAAC,YAAY,CAAC;SAC5B;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACpC;aAAM;YACL,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAClC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC;IAED,UAAU;QACR,OAAO,gBAAO,CAAC;IACjB,CAAC;IAED,eAAe,CAAC,GAAW;QACzB,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,GAAW;QAC7C,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAChD;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAChD;aAAM;YACL,MAAM,8CAA8C,CAAC;SACtD;IACH,CAAC;IAED,cAAc;QACZ,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,CACL,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,eAAe,KAAK,SAAS,CACxE,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAgB;QAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,CACL,OAAO,CAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,KAAK,QAAQ,CACxE,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,QAAa;QAC7B,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACzC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACpD;aAAM,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YAC3C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAC1C;IACH,CAAC;IAED,oBAAoB,CAAC,QAAa;QAChC,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACzC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACvD;aAAM,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YAC3C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAC1C;IACH,CAAC;IAED,SAAS,CAAC,GAAW;QAInB,MAAM,MAAM,GAAG;YACb,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7D,OAAO,MAAM,GAAG,UAAC,EAAI,EAAE,EAAC;QAC1B,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACpC,CAAC;CACF,CAAC;AAEa,mDAAO,EAAC;;;AC7KvB,IAAK,aAIJ;AAJD,WAAK,aAAa;IAChB,mDAAS;IACT,iDAAQ;IACR,mDAAS;AACX,CAAC,EAJI,aAAa,KAAb,aAAa,QAIjB;AAEc,gEAAa,EAAC;;;ACNuB;AACzB;AACgB;AAW5B,MAAM,iBAAQ;IAQ3B,YAAY,GAAW,EAAE,OAAe,EAAE,OAAwB;QAChE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,KAAK;QACd,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,MAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CACzD,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACjE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;aACrB;SACF;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAK;QACR,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,QAAQ;QACnB,IAAI,IAAI,GAAG,MAAkB,CAC3B;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM;SACtB,EACD,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;YACD,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;;;ACzFsC;AACZ;AACS;AACgB;AAarC,MAAM,oCAAiB;IAMpC,YACE,IAAY,EACZ,QAAgB,EAChB,SAAoB,EACpB,OAAwB;QAExB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IAOD,OAAO,CAAC,WAAmB,EAAE,QAAkB;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,OAAO,WAAW,CAAC,IAAI,mBAA0B,EAAE,EAAE,QAAQ,CAAC,CAAC;SAChE;aAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,EAAE;YACtC,OAAO,WAAW,CAAC,IAAI,uBAA8B,EAAE,EAAE,QAAQ,CAAC,CAAC;SACpE;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC7C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,IAAI,aAAa,GAAG;YAClB,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/C,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,MAAM,GAAG;YACX,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,UAAS,MAAM;gBAC5D,SAAS,GAAG,IAAI,CAAC;gBACjB,eAAe,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,OAAO,GAAG,UAAS,KAAK;YAC1B,eAAe,EAAE,CAAC;YAClB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG;YACb,eAAe,EAAE,CAAC;YAClB,IAAI,mBAAmB,CAAC;YAMxB,mBAAmB,GAAG,iBAA6B,CAAC,SAAS,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,eAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,IAAI,eAAe,GAAG;YACpB,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAGnC,SAAS,CAAC,UAAU,EAAE,CAAC;QAEvB,OAAO;YACL,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,SAAS,EAAE;oBACb,OAAO;iBACR;gBACD,eAAe,EAAE,CAAC;gBAClB,IAAI,SAAS,EAAE;oBACb,SAAS,CAAC,KAAK,EAAE,CAAC;iBACnB;qBAAM;oBACL,SAAS,CAAC,KAAK,EAAE,CAAC;iBACnB;YACH,CAAC;YACD,gBAAgB,EAAE,CAAC,CAAC,EAAE;gBACpB,IAAI,SAAS,EAAE;oBACb,OAAO;iBACR;gBACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;oBACrB,IAAI,SAAS,EAAE;wBACb,SAAS,CAAC,KAAK,EAAE,CAAC;qBACnB;yBAAM;wBACL,SAAS,CAAC,KAAK,EAAE,CAAC;qBACnB;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,WAAW,CAAC,KAAY,EAAE,QAAkB;IACnD,IAAI,CAAC,KAAK,CAAC;QACT,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,cAAY,CAAC;QACpB,gBAAgB,EAAE,cAAY,CAAC;KAChC,CAAC;AACJ,CAAC;;;AC/ImD;AACzB;AAES;AAEiB;AAGvB;AAE9B,MAAM,EAAE,UAAU,+BAAE,GAAG,OAAO,CAAC;AAExB,IAAI,gCAAe,GAAG,UAC3B,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,OAAwB,EACxB,OAA0B;IAE1B,IAAI,cAAc,GAAG,2BAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,oBAA2B,CAAC,IAAI,CAAC,CAAC;KAC7C;IAED,IAAI,OAAO,GACT,CAAC,CAAC,MAAM,CAAC,iBAAiB;QACxB,YAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,MAAM,CAAC,kBAAkB;YACzB,YAAwB,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtE,IAAI,SAAS,CAAC;IACd,IAAI,OAAO,EAAE;QACX,OAAO,GAAG,MAAM,CAAC,MAAM,CACrB,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAC7C,OAAO,CACR,CAAC;QAEF,SAAS,GAAG,IAAI,oCAAiB,CAC/B,IAAI,EACJ,QAAQ,EACR,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,EAC/D,OAAO,CACR,CAAC;KACH;SAAM;QACL,SAAS,GAAG,oCAAmB,CAAC;KACjC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,IAAI,oCAAmB,GAAa;IAClC,WAAW,EAAE;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,UAAS,CAAC,EAAE,QAAQ;QAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,IAAI,mBAA0B,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE;gBACL,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC;YACD,gBAAgB,EAAE,cAAY,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAC;;;ACvD4B;AAmCvB,SAAS,eAAe,CAAC,OAAO;IACrC,IAAI,OAAO,IAAI,IAAI,EAAE;QACnB,MAAM,iCAAiC,CAAC;KACzC;IACD,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;QAC3B,MAAM,uCAAuC,CAAC;KAC/C;IACD,IAAI,cAAc,IAAI,OAAO,EAAE;QAC7B,MAAM,CAAC,IAAI,CACT,+DAA+D,CAChE,CAAC;KACH;AACH,CAAC;;;ACpDkB;AAEW;AAE9B,MAAM,mBAAmB,GAAG,CAC1B,MAAuC,EACvC,WAAgC,EAChC,EAAE;IACF,IAAI,KAAK,GAAG,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/D,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;QAClC,KAAK;YACH,GAAG;gBACH,kBAAkB,CAAC,GAAG,CAAC;gBACvB,GAAG;gBACH,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;IAED,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE;QACtC,IAAI,aAAa,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,KAAK,IAAI,GAAG,IAAI,aAAa,EAAE;YAC7B,KAAK;gBACH,GAAG;oBACH,kBAAkB,CAAC,GAAG,CAAC;oBACvB,GAAG;oBACH,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,WAAgC,EACL,EAAE;IAC7B,IAAI,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;QAC1E,MAAM,IAAI,WAAW,CAAC,SAAS,sCAAsC,CAAC;KACvE;IAED,OAAO,CACL,MAAuC,EACvC,QAAoC,EACpC,EAAE;QACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAC7C,OAAO,EACP,KAAK,EACL,WAAW,EACX,eAAe,CAAC,kBAAkB,EAClC,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,wEAAiB,EAAC;;;ACvDd;AAEW;AAE9B,MAAM,sCAAmB,GAAG,CAC1B,MAAyC,EACzC,WAAgC,EAChC,EAAE;IACF,IAAI,KAAK,GAAG,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/D,KAAK,IAAI,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnE,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;QAClC,KAAK;YACH,GAAG;gBACH,kBAAkB,CAAC,GAAG,CAAC;gBACvB,GAAG;gBACH,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;IAED,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE;QACtC,IAAI,aAAa,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,KAAK,IAAI,GAAG,IAAI,aAAa,EAAE;YAC7B,KAAK;gBACH,GAAG;oBACH,kBAAkB,CAAC,GAAG,CAAC;oBACvB,GAAG;oBACH,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,WAAgC,EACH,EAAE;IAC/B,IAAI,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;QAC1E,MAAM,IAAI,WAAW,CAAC,SAAS,sCAAsC,CAAC;KACvE;IAED,OAAO,CACL,MAAyC,EACzC,QAAsC,EACtC,EAAE;QACF,MAAM,KAAK,GAAG,sCAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEvD,OAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAC7C,OAAO,EACP,KAAK,EACL,WAAW,EACX,eAAe,CAAC,oBAAoB,EACpC,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,wEAAiB,EAAC;;;ACjC1B,MAAM,sBAAsB,GAAG,CACpC,MAAM,EACN,WAAgC,EAChC,0BAAsD,EACzB,EAAE;IAC/B,MAAM,2BAA2B,GAAgC;QAC/D,aAAa,EAAE,WAAW,CAAC,SAAS;QACpC,YAAY,EAAE,WAAW,CAAC,QAAQ;QAClC,IAAI,EAAE;YACJ,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B;KACF,CAAC;IACF,OAAO,CACL,MAAyC,EACzC,QAAsC,EACtC,EAAE;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAInD,MAAM,iBAAiB,GAAgC,0BAA0B,CAC/E,OAAO,EACP,2BAA2B,CAC5B,CAAC;QACF,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC,CAAC;;;ACxDgC;AAMwB;AACA;AACoB;AAChD;AA2CvB,SAAS,SAAS,CAAC,IAAa,EAAE,MAAM;IAC7C,IAAI,MAAM,GAAW;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe;QACjE,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QACrD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU;QAChD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB;QAC1E,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACtC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QAEzC,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACvC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAE9B,iBAAiB,EAAE,sBAAsB,CAAC,IAAI,CAAC;QAC/C,iBAAiB,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC;KACxD,CAAC;IAEF,IAAI,oBAAoB,IAAI,IAAI;QAC9B,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACtD,IAAI,mBAAmB,IAAI,IAAI;QAC7B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACpD,IAAI,kBAAkB,IAAI,IAAI;QAC5B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAClD,IAAI,gBAAgB,IAAI,IAAI;QAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC1E,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACzB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IACD,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,OAAO,UAAU,IAAI,CAAC,OAAO,aAAa,CAAC;KAC5C;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,OAAO,MAAM,OAAO,aAAa,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;QACtC,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;QAClC,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,aAAa,IAAI,IAAI,EAAE;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAI,cAAc,IAAI,IAAI,EAAE;QAC1B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;KAC3B;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAa;IAC3C,MAAM,kBAAkB,mCACnB,QAAQ,CAAC,kBAAkB,GAC3B,IAAI,CAAC,kBAAkB,CAC3B,CAAC;IACF,IACE,eAAe,IAAI,kBAAkB;QACrC,kBAAkB,CAAC,eAAe,CAAC,IAAI,IAAI,EAC3C;QACA,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;KAC5C;IAED,OAAO,kBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,MAAM;IAC7C,IAAI,oBAAiD,CAAC;IACtD,IAAI,sBAAsB,IAAI,IAAI,EAAE;QAClC,oBAAoB,mCACf,QAAQ,CAAC,oBAAoB,GAC7B,IAAI,CAAC,oBAAoB,CAC7B,CAAC;KACH;SAAM;QACL,oBAAoB,GAAG;YACrB,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa;YACvD,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;SACrD,CAAC;QACF,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1E,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI;gBACxB,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;SACpD;QACD,IAAI,YAAY,IAAI,IAAI;YACtB,oBAAoB,CAAC,aAAa,GAAG,sBAAsB,CACzD,MAAM,EACN,oBAAoB,EACpB,IAAI,CAAC,UAAU,CAChB,CAAC;KACL;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAa,EACb,MAAM;IAEN,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,IACE,eAAe,IAAI,oBAAoB;QACvC,oBAAoB,CAAC,eAAe,CAAC,IAAI,IAAI,EAC7C;QACA,OAAO,oBAAoB,CAAC,eAAe,CAAC,CAAC;KAC9C;IAED,OAAO,kBAAiB,CAAC,oBAAoB,CAAC,CAAC;AACjD,CAAC;;;AC5L6B;AAEqB;AAEpC,MAAM,yBAAgB,SAAQ,qBAAgB;IAG3D,YAAmB,MAAc;QAC/B,KAAK,CAAC,UAAS,SAAS,EAAE,IAAI;YAC5B,MAAM,CAAC,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,WAAW;QACrB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,0BAA0B;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;YACnD,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,IAAI,SAAS,KAAK,kCAAkC,EAAE;gBACpD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;;AC9BD,SAAS,WAAW;IAClB,IAAI,OAAO,EAAE,MAAM,CAAC;IACpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,OAAO,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAEc,4DAAW,EAAC;;;ACRG;AAKW;AACC;AACS;AACJ;AAEhC,MAAM,eAAW,SAAQ,qBAAgB;IAStD,YAAmB,MAAc;QAC/B,KAAK,CAAC,UAAS,SAAS,EAAE,IAAI;YAC5B,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAVL,qBAAgB,GAAY,KAAK,CAAC;QAClC,cAAS,GAAQ,IAAI,CAAC;QACtB,wBAAmB,GAAY,IAAI,CAAC;QACpC,sBAAiB,GAAiB,IAAI,CAAC;QAE/B,uBAAkB,GAAa,IAAI,CAAC;QA8DpC,iBAAY,GAA+B,CACjD,GAAG,EACH,QAAgC,EAChC,EAAE;YACF,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO;aACR;YAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B,CAAC,CAAC;QAGL,CAAC,CAAC;QAxEA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACpE,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,EAAE;gBACvD,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;YACD,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,EAAE;gBACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,yBAAyB,EAAE,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAe,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YAC7C,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,IAAI,SAAS,KAAK,uBAAuB,EAAE;gBACzC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,IACE,IAAI,CAAC,mBAAmB;gBACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAC/C;gBACA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE;YAEhD,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAClC;YACE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;SAC3C,EACD,IAAI,CAAC,YAAY,CAClB,CAAC;IACJ,CAAC;IAoBO,gBAAgB,CAAC,IAAS;QAChC,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,0CAA0C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;SACR;QAED,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;YACrE,MAAM,CAAC,KAAK,CACV,+CAA+C,IAAI,CAAC,SAAS,EAAE,CAChE,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;SACR;QAGD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QACxB,MAAM,iBAAiB,GAAG,OAAO,CAAC,EAAE;YAClC,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,EAAE;gBAChE,OAAO,CAAC,qBAAqB,EAAE,CAAC;aACjC;iBAAM,IACL,CAAC,OAAO,CAAC,mBAAmB;gBAC5B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EAC5C;gBACA,OAAO,CAAC,SAAS,EAAE,CAAC;aACrB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,eAAO,CACpC,mBAAmB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EACtC,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;YACvD,IACE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC3C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAClC;gBAEA,OAAO;aACR;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAGzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;IACH,CAAC;IAEO,yBAAyB;QAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAE,IAAI,CAAC,iBAAyB,CAAC,IAAI,EAAE;YACnE,OAAO;SACR;QAID,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,YAAW,EAAE,CAAC;QACrD,OAAe,CAAC,IAAI,GAAG,KAAK,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAG,EAAE;YAClB,OAAe,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACpC,CAAC;CACF;;;ACxL6B;AAEqB;AAGe;AACvB;AAEE;AACmB;AAGjB;AACb;AAEJ;AACQ;AAEe;AACR;AAEb;AAEhC,MAAqB,aAAM;IAYzB,MAAM,CAAC,KAAK;QACV,aAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,aAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B;IACH,CAAC;IAIO,MAAM,CAAC,iBAAiB;QAC9B,OAAO,IAAgB,CACrB,YAAwB,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,UAAS,CAAC;YAChE,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAaD,YAAY,OAAe,EAAE,OAAgB;QAC3C,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAgB,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE;YACrD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,QAAQ,EAAE,aAAM,CAAC,iBAAiB,EAAE;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE;YACxC,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,cAAa,CAAC,IAAI;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAC3B,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI;aACvD,CAAC,CAAC;SACJ;QAED,IAAI,WAAW,GAAG,CAAC,OAAwB,EAAE,EAAE;YAC7C,OAAO,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,gCAAe,CAAC,CAAC;QAC3E,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1D,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;YAClD,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;aACxD;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YACtC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,IAAI,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC5B;aACF;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,aAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,IAAI,GAAG,IAAI,eAAU,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,aAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;IACH,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;gBACzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,oBAAa,CAAC,KAAK,EAAE;oBAClD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;IACH,CAAC;IAED,IAAI,CAAC,UAAkB,EAAE,QAAkB,EAAE,OAAa;QACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,UAAmB,EAAE,QAAmB,EAAE,OAAa;QAC5D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,QAAkB;QAC5B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,QAAmB;QAC/B,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,QAAmB;QAC5B,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,IAAI,WAAW,CAAC;QAChB,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACtD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;aAC7B;SACF;IACH,CAAC;IAED,SAAS,CAAC,YAAoB;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,EAAE;YAChE,OAAO,CAAC,qBAAqB,EAAE,CAAC;SACjC;aAAM,IACL,CAAC,OAAO,CAAC,mBAAmB;YAC5B,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EACrC;YACA,OAAO,CAAC,SAAS,EAAE,CAAC;SACrB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,YAAoB;QAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,mBAAmB,EAAE;YAC1C,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAC9B;aAAM;YACL,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE;gBACjC,OAAO,CAAC,WAAW,EAAE,CAAC;aACvB;SACF;IACH,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,IAAS,EAAE,OAAgB;QACxD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;;AAzNM,uBAAS,GAAa,EAAE,CAAC;AACzB,qBAAO,GAAY,KAAK,CAAC;AACzB,0BAAY,GAAY,KAAK,CAAC;AAG9B,qBAAO,GAAoB,OAAO,CAAC;AACnC,6BAAe,GAAc,OAAQ,CAAC,eAAe,CAAC;AACtD,mCAAqB,GAAc,OAAQ,CAAC,qBAAqB,CAAC;AAClE,4BAAc,GAAc,OAAQ,CAAC,cAAc,CAAC;AAVxC,6DAAM;AA8N3B,SAAS,WAAW,CAAC,GAAG;IACtB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;QACrC,MAAM,yDAAyD,CAAC;KACjE;AACH,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,aAAM,CAAC,CAAC;;;;;;AC5PQ;AACuB;AACnB;AAEnB,MAAM,2CAAqB,SAAQ,WAAM;IACtD,YAAY,OAAe,EAAE,OAAgB;QAC3C,WAAM,CAAC,YAAY,GAAG,2CAAoB,CAAC,YAAY,CAAC;QACxD,WAAM,CAAC,GAAG,GAAG,2CAAoB,CAAC,GAAG,CAAC;QAEtC,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,SAAI,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF","file":"pusher-with-encryption.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","/* (ignored) */","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/web/pusher-with-encryption.min.js b/dist/web/pusher-with-encryption.min.js index c66406e30..2214b59f4 100644 --- a/dist/web/pusher-with-encryption.min.js +++ b/dist/web/pusher-with-encryption.min.js @@ -1,9 +1,9 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. */ -!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Pusher=n():t.Pusher=n()}(window,(function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=3)}([function(t,n,e){"use strict";var r,o=this&&this.__extends||(r=function(t,n){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(t,n)},function(t,n){function e(){this.constructor=t}r(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)});Object.defineProperty(n,"__esModule",{value:!0});var i=function(){function t(t){void 0===t&&(t="="),this._paddingCharacter=t}return t.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(8*t+5)/6|0},t.prototype.encode=function(t){for(var n="",e=0;e>>18&63),n+=this._encodeByte(r>>>12&63),n+=this._encodeByte(r>>>6&63),n+=this._encodeByte(r>>>0&63)}var o=t.length-e;if(o>0){r=t[e]<<16|(2===o?t[e+1]<<8:0);n+=this._encodeByte(r>>>18&63),n+=this._encodeByte(r>>>12&63),n+=2===o?this._encodeByte(r>>>6&63):this._paddingCharacter||"",n+=this._paddingCharacter||""}return n},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var n=this._getPaddingLength(t),e=t.length-n,r=new Uint8Array(this.maxDecodedLength(e)),o=0,i=0,s=0,a=0,c=0,u=0,h=0;i>>4,r[o++]=c<<4|u>>>2,r[o++]=u<<6|h,s|=256&a,s|=256&c,s|=256&u,s|=256&h;if(i>>4,s|=256&a,s|=256&c),i>>2,s|=256&u),i>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-15,n+=62-t>>>8&3,String.fromCharCode(n)},t.prototype._decodeChar=function(t){var n=256;return n+=(42-t&t-44)>>>8&-256+t-43+62,n+=(46-t&t-48)>>>8&-256+t-47+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var n=0;if(this._paddingCharacter){for(var e=t.length-1;e>=0&&t[e]===this._paddingCharacter;e--)n++;if(t.length<4||n>2)throw new Error("Base64Coder: incorrect padding")}return n},t}();n.Coder=i;var s=new i;n.encode=function(t){return s.encode(t)},n.decode=function(t){return s.decode(t)};var a=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return o(n,t),n.prototype._encodeByte=function(t){var n=t;return n+=65,n+=25-t>>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-13,n+=62-t>>>8&49,String.fromCharCode(n)},n.prototype._decodeChar=function(t){var n=256;return n+=(44-t&t-46)>>>8&-256+t-45+62,n+=(94-t&t-96)>>>8&-256+t-95+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},n}(i);n.URLSafeCoder=a;var c=new a;n.encodeURLSafe=function(t){return c.encode(t)},n.decodeURLSafe=function(t){return c.decode(t)},n.encodedLength=function(t){return s.encodedLength(t)},n.maxDecodedLength=function(t){return s.maxDecodedLength(t)},n.decodedLength=function(t){return s.decodedLength(t)}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r="utf8: invalid source encoding";function o(t){for(var n=0,e=0;e=t.length-1)throw new Error("utf8: invalid string");e++,n+=4}}return n}n.encode=function(t){for(var n=new Uint8Array(o(t)),e=0,r=0;r>6,n[e++]=128|63&i):i<55296?(n[e++]=224|i>>12,n[e++]=128|i>>6&63,n[e++]=128|63&i):(r++,i=(1023&i)<<10,i|=1023&t.charCodeAt(r),i+=65536,n[e++]=240|i>>18,n[e++]=128|i>>12&63,n[e++]=128|i>>6&63,n[e++]=128|63&i)}return n},n.encodedLength=o,n.decode=function(t){for(var n=[],e=0;e=t.length)throw new Error(r);if(128!=(192&(s=t[++e])))throw new Error(r);o=(31&o)<<6|63&s,i=128}else if(o<240){if(e>=t.length-1)throw new Error(r);var s=t[++e],a=t[++e];if(128!=(192&s)||128!=(192&a))throw new Error(r);o=(15&o)<<12|(63&s)<<6|63&a,i=2048}else{if(!(o<248))throw new Error(r);if(e>=t.length-2)throw new Error(r);s=t[++e],a=t[++e];var c=t[++e];if(128!=(192&s)||128!=(192&a)||128!=(192&c))throw new Error(r);o=(15&o)<<18|(63&s)<<12|(63&a)<<6|63&c,i=65536}if(o=55296&&o<=57343)throw new Error(r);if(o>=65536){if(o>1114111)throw new Error(r);o-=65536,n.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}n.push(String.fromCharCode(o))}return n.join("")}},function(t,n,e){!function(t){"use strict";var n=function(t){var n,e=new Float64Array(16);if(t)for(n=0;n>24&255,t[n+1]=e>>16&255,t[n+2]=e>>8&255,t[n+3]=255&e,t[n+4]=r>>24&255,t[n+5]=r>>16&255,t[n+6]=r>>8&255,t[n+7]=255&r}function y(t,n,e,r,o){var i,s=0;for(i=0;i>>8)-1}function v(t,n,e,r){return y(t,n,e,r,16)}function g(t,n,e,r){return y(t,n,e,r,32)}function b(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,p=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=i,S=s,k=a,C=c,T=u,P=h,O=p,A=l,E=f,x=d,L=y,R=v,U=g,j=b,M=m,I=w,D=0;D<20;D+=2)_^=(o=(U^=(o=(E^=(o=(T^=(o=_+U|0)<<7|o>>>25)+_|0)<<9|o>>>23)+T|0)<<13|o>>>19)+E|0)<<18|o>>>14,P^=(o=(S^=(o=(j^=(o=(x^=(o=P+S|0)<<7|o>>>25)+P|0)<<9|o>>>23)+x|0)<<13|o>>>19)+j|0)<<18|o>>>14,L^=(o=(O^=(o=(k^=(o=(M^=(o=L+O|0)<<7|o>>>25)+L|0)<<9|o>>>23)+M|0)<<13|o>>>19)+k|0)<<18|o>>>14,I^=(o=(R^=(o=(A^=(o=(C^=(o=I+R|0)<<7|o>>>25)+I|0)<<9|o>>>23)+C|0)<<13|o>>>19)+A|0)<<18|o>>>14,_^=(o=(C^=(o=(k^=(o=(S^=(o=_+C|0)<<7|o>>>25)+_|0)<<9|o>>>23)+S|0)<<13|o>>>19)+k|0)<<18|o>>>14,P^=(o=(T^=(o=(A^=(o=(O^=(o=P+T|0)<<7|o>>>25)+P|0)<<9|o>>>23)+O|0)<<13|o>>>19)+A|0)<<18|o>>>14,L^=(o=(x^=(o=(E^=(o=(R^=(o=L+x|0)<<7|o>>>25)+L|0)<<9|o>>>23)+R|0)<<13|o>>>19)+E|0)<<18|o>>>14,I^=(o=(M^=(o=(j^=(o=(U^=(o=I+M|0)<<7|o>>>25)+I|0)<<9|o>>>23)+U|0)<<13|o>>>19)+j|0)<<18|o>>>14;_=_+i|0,S=S+s|0,k=k+a|0,C=C+c|0,T=T+u|0,P=P+h|0,O=O+p|0,A=A+l|0,E=E+f|0,x=x+d|0,L=L+y|0,R=R+v|0,U=U+g|0,j=j+b|0,M=M+m|0,I=I+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=P>>>0&255,t[21]=P>>>8&255,t[22]=P>>>16&255,t[23]=P>>>24&255,t[24]=O>>>0&255,t[25]=O>>>8&255,t[26]=O>>>16&255,t[27]=O>>>24&255,t[28]=A>>>0&255,t[29]=A>>>8&255,t[30]=A>>>16&255,t[31]=A>>>24&255,t[32]=E>>>0&255,t[33]=E>>>8&255,t[34]=E>>>16&255,t[35]=E>>>24&255,t[36]=x>>>0&255,t[37]=x>>>8&255,t[38]=x>>>16&255,t[39]=x>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=R>>>0&255,t[45]=R>>>8&255,t[46]=R>>>16&255,t[47]=R>>>24&255,t[48]=U>>>0&255,t[49]=U>>>8&255,t[50]=U>>>16&255,t[51]=U>>>24&255,t[52]=j>>>0&255,t[53]=j>>>8&255,t[54]=j>>>16&255,t[55]=j>>>24&255,t[56]=M>>>0&255,t[57]=M>>>8&255,t[58]=M>>>16&255,t[59]=M>>>24&255,t[60]=I>>>0&255,t[61]=I>>>8&255,t[62]=I>>>16&255,t[63]=I>>>24&255}(t,n,e,r)}function m(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,p=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=0;_<20;_+=2)i^=(o=(g^=(o=(f^=(o=(u^=(o=i+g|0)<<7|o>>>25)+i|0)<<9|o>>>23)+u|0)<<13|o>>>19)+f|0)<<18|o>>>14,h^=(o=(s^=(o=(b^=(o=(d^=(o=h+s|0)<<7|o>>>25)+h|0)<<9|o>>>23)+d|0)<<13|o>>>19)+b|0)<<18|o>>>14,y^=(o=(p^=(o=(a^=(o=(m^=(o=y+p|0)<<7|o>>>25)+y|0)<<9|o>>>23)+m|0)<<13|o>>>19)+a|0)<<18|o>>>14,w^=(o=(v^=(o=(l^=(o=(c^=(o=w+v|0)<<7|o>>>25)+w|0)<<9|o>>>23)+c|0)<<13|o>>>19)+l|0)<<18|o>>>14,i^=(o=(c^=(o=(a^=(o=(s^=(o=i+c|0)<<7|o>>>25)+i|0)<<9|o>>>23)+s|0)<<13|o>>>19)+a|0)<<18|o>>>14,h^=(o=(u^=(o=(l^=(o=(p^=(o=h+u|0)<<7|o>>>25)+h|0)<<9|o>>>23)+p|0)<<13|o>>>19)+l|0)<<18|o>>>14,y^=(o=(d^=(o=(f^=(o=(v^=(o=y+d|0)<<7|o>>>25)+y|0)<<9|o>>>23)+v|0)<<13|o>>>19)+f|0)<<18|o>>>14,w^=(o=(m^=(o=(b^=(o=(g^=(o=w+m|0)<<7|o>>>25)+w|0)<<9|o>>>23)+g|0)<<13|o>>>19)+b|0)<<18|o>>>14;t[0]=i>>>0&255,t[1]=i>>>8&255,t[2]=i>>>16&255,t[3]=i>>>24&255,t[4]=h>>>0&255,t[5]=h>>>8&255,t[6]=h>>>16&255,t[7]=h>>>24&255,t[8]=y>>>0&255,t[9]=y>>>8&255,t[10]=y>>>16&255,t[11]=y>>>24&255,t[12]=w>>>0&255,t[13]=w>>>8&255,t[14]=w>>>16&255,t[15]=w>>>24&255,t[16]=p>>>0&255,t[17]=p>>>8&255,t[18]=p>>>16&255,t[19]=p>>>24&255,t[20]=l>>>0&255,t[21]=l>>>8&255,t[22]=l>>>16&255,t[23]=l>>>24&255,t[24]=f>>>0&255,t[25]=f>>>8&255,t[26]=f>>>16&255,t[27]=f>>>24&255,t[28]=d>>>0&255,t[29]=d>>>8&255,t[30]=d>>>16&255,t[31]=d>>>24&255}(t,n,e,r)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function _(t,n,e,r,o,i,s){var a,c,u=new Uint8Array(16),h=new Uint8Array(64);for(c=0;c<16;c++)u[c]=0;for(c=0;c<8;c++)u[c]=i[c];for(;o>=64;){for(b(h,u,s,w),c=0;c<64;c++)t[n+c]=e[r+c]^h[c];for(a=1,c=8;c<16;c++)a=a+(255&u[c])|0,u[c]=255&a,a>>>=8;o-=64,n+=64,r+=64}if(o>0)for(b(h,u,s,w),c=0;c=64;){for(b(c,a,o,w),s=0;s<64;s++)t[n+s]=c[s];for(i=1,s=8;s<16;s++)i=i+(255&a[s])|0,a[s]=255&i,i>>>=8;e-=64,n+=64}if(e>0)for(b(c,a,o,w),s=0;s>>13|e<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(e>>>10|r<<6),o=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|o<<9),i=255&t[8]|(255&t[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,s=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(i>>>14|s<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(s>>>11|a<<5),c=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function P(t,n,e,r,o,i){var s=new T(i);return s.update(e,r,o),s.finish(t,n),0}function O(t,n,e,r,o,i){var s=new Uint8Array(16);return P(s,0,e,r,o,i),v(t,n,s,0)}function A(t,n,e,r,o){var i;if(e<32)return-1;for(C(t,0,n,0,e,r,o),P(t,16,t,32,e-32,t),i=0;i<16;i++)t[i]=0;return 0}function E(t,n,e,r,o){var i,s=new Uint8Array(32);if(e<32)return-1;if(k(s,0,32,r,o),0!==O(n,16,n,32,e-32,s))return-1;for(C(t,0,n,0,e,r,o),i=0;i<32;i++)t[i]=0;return 0}function x(t,n){var e;for(e=0;e<16;e++)t[e]=0|n[e]}function L(t){var n,e,r=1;for(n=0;n<16;n++)e=t[n]+r+65535,r=Math.floor(e/65536),t[n]=e-65536*r;t[0]+=r-1+37*(r-1)}function R(t,n,e){for(var r,o=~(e-1),i=0;i<16;i++)r=o&(t[i]^n[i]),t[i]^=r,n[i]^=r}function U(t,e){var r,o,i,s=n(),a=n();for(r=0;r<16;r++)a[r]=e[r];for(L(a),L(a),L(a),o=0;o<2;o++){for(s[0]=a[0]-65517,r=1;r<15;r++)s[r]=a[r]-65535-(s[r-1]>>16&1),s[r-1]&=65535;s[15]=a[15]-32767-(s[14]>>16&1),i=s[15]>>16&1,s[14]&=65535,R(a,s,1-i)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function j(t,n){var e=new Uint8Array(32),r=new Uint8Array(32);return U(e,t),U(r,n),g(e,0,r,0)}function M(t){var n=new Uint8Array(32);return U(n,t),1&n[0]}function I(t,n){var e;for(e=0;e<16;e++)t[e]=n[2*e]+(n[2*e+1]<<8);t[15]&=32767}function D(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]+e[r]}function N(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]-e[r]}function B(t,n,e){var r,o,i=0,s=0,a=0,c=0,u=0,h=0,p=0,l=0,f=0,d=0,y=0,v=0,g=0,b=0,m=0,w=0,_=0,S=0,k=0,C=0,T=0,P=0,O=0,A=0,E=0,x=0,L=0,R=0,U=0,j=0,M=0,I=e[0],D=e[1],N=e[2],B=e[3],z=e[4],H=e[5],q=e[6],F=e[7],X=e[8],J=e[9],Y=e[10],K=e[11],W=e[12],G=e[13],V=e[14],Z=e[15];i+=(r=n[0])*I,s+=r*D,a+=r*N,c+=r*B,u+=r*z,h+=r*H,p+=r*q,l+=r*F,f+=r*X,d+=r*J,y+=r*Y,v+=r*K,g+=r*W,b+=r*G,m+=r*V,w+=r*Z,s+=(r=n[1])*I,a+=r*D,c+=r*N,u+=r*B,h+=r*z,p+=r*H,l+=r*q,f+=r*F,d+=r*X,y+=r*J,v+=r*Y,g+=r*K,b+=r*W,m+=r*G,w+=r*V,_+=r*Z,a+=(r=n[2])*I,c+=r*D,u+=r*N,h+=r*B,p+=r*z,l+=r*H,f+=r*q,d+=r*F,y+=r*X,v+=r*J,g+=r*Y,b+=r*K,m+=r*W,w+=r*G,_+=r*V,S+=r*Z,c+=(r=n[3])*I,u+=r*D,h+=r*N,p+=r*B,l+=r*z,f+=r*H,d+=r*q,y+=r*F,v+=r*X,g+=r*J,b+=r*Y,m+=r*K,w+=r*W,_+=r*G,S+=r*V,k+=r*Z,u+=(r=n[4])*I,h+=r*D,p+=r*N,l+=r*B,f+=r*z,d+=r*H,y+=r*q,v+=r*F,g+=r*X,b+=r*J,m+=r*Y,w+=r*K,_+=r*W,S+=r*G,k+=r*V,C+=r*Z,h+=(r=n[5])*I,p+=r*D,l+=r*N,f+=r*B,d+=r*z,y+=r*H,v+=r*q,g+=r*F,b+=r*X,m+=r*J,w+=r*Y,_+=r*K,S+=r*W,k+=r*G,C+=r*V,T+=r*Z,p+=(r=n[6])*I,l+=r*D,f+=r*N,d+=r*B,y+=r*z,v+=r*H,g+=r*q,b+=r*F,m+=r*X,w+=r*J,_+=r*Y,S+=r*K,k+=r*W,C+=r*G,T+=r*V,P+=r*Z,l+=(r=n[7])*I,f+=r*D,d+=r*N,y+=r*B,v+=r*z,g+=r*H,b+=r*q,m+=r*F,w+=r*X,_+=r*J,S+=r*Y,k+=r*K,C+=r*W,T+=r*G,P+=r*V,O+=r*Z,f+=(r=n[8])*I,d+=r*D,y+=r*N,v+=r*B,g+=r*z,b+=r*H,m+=r*q,w+=r*F,_+=r*X,S+=r*J,k+=r*Y,C+=r*K,T+=r*W,P+=r*G,O+=r*V,A+=r*Z,d+=(r=n[9])*I,y+=r*D,v+=r*N,g+=r*B,b+=r*z,m+=r*H,w+=r*q,_+=r*F,S+=r*X,k+=r*J,C+=r*Y,T+=r*K,P+=r*W,O+=r*G,A+=r*V,E+=r*Z,y+=(r=n[10])*I,v+=r*D,g+=r*N,b+=r*B,m+=r*z,w+=r*H,_+=r*q,S+=r*F,k+=r*X,C+=r*J,T+=r*Y,P+=r*K,O+=r*W,A+=r*G,E+=r*V,x+=r*Z,v+=(r=n[11])*I,g+=r*D,b+=r*N,m+=r*B,w+=r*z,_+=r*H,S+=r*q,k+=r*F,C+=r*X,T+=r*J,P+=r*Y,O+=r*K,A+=r*W,E+=r*G,x+=r*V,L+=r*Z,g+=(r=n[12])*I,b+=r*D,m+=r*N,w+=r*B,_+=r*z,S+=r*H,k+=r*q,C+=r*F,T+=r*X,P+=r*J,O+=r*Y,A+=r*K,E+=r*W,x+=r*G,L+=r*V,R+=r*Z,b+=(r=n[13])*I,m+=r*D,w+=r*N,_+=r*B,S+=r*z,k+=r*H,C+=r*q,T+=r*F,P+=r*X,O+=r*J,A+=r*Y,E+=r*K,x+=r*W,L+=r*G,R+=r*V,U+=r*Z,m+=(r=n[14])*I,w+=r*D,_+=r*N,S+=r*B,k+=r*z,C+=r*H,T+=r*q,P+=r*F,O+=r*X,A+=r*J,E+=r*Y,x+=r*K,L+=r*W,R+=r*G,U+=r*V,j+=r*Z,w+=(r=n[15])*I,s+=38*(S+=r*N),a+=38*(k+=r*B),c+=38*(C+=r*z),u+=38*(T+=r*H),h+=38*(P+=r*q),p+=38*(O+=r*F),l+=38*(A+=r*X),f+=38*(E+=r*J),d+=38*(x+=r*Y),y+=38*(L+=r*K),v+=38*(R+=r*W),g+=38*(U+=r*G),b+=38*(j+=r*V),m+=38*(M+=r*Z),i=(r=(i+=38*(_+=r*D))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),w=(r=w+o+65535)-65536*(o=Math.floor(r/65536)),i=(r=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),w=(r=w+o+65535)-65536*(o=Math.floor(r/65536)),i+=o-1+37*(o-1),t[0]=i,t[1]=s,t[2]=a,t[3]=c,t[4]=u,t[5]=h,t[6]=p,t[7]=l,t[8]=f,t[9]=d,t[10]=y,t[11]=v,t[12]=g,t[13]=b,t[14]=m,t[15]=w}function z(t,n){B(t,n,n)}function H(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=253;r>=0;r--)z(o,o),2!==r&&4!==r&&B(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function q(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=250;r>=0;r--)z(o,o),1!==r&&B(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function F(t,e,r){var o,i,s=new Uint8Array(32),a=new Float64Array(80),u=n(),h=n(),p=n(),l=n(),f=n(),d=n();for(i=0;i<31;i++)s[i]=e[i];for(s[31]=127&e[31]|64,s[0]&=248,I(a,r),i=0;i<16;i++)h[i]=a[i],l[i]=u[i]=p[i]=0;for(u[0]=l[0]=1,i=254;i>=0;--i)R(u,h,o=s[i>>>3]>>>(7&i)&1),R(p,l,o),D(f,u,p),N(u,u,p),D(p,h,l),N(h,h,l),z(l,f),z(d,u),B(u,p,u),B(p,h,f),D(f,u,p),N(u,u,p),z(h,u),N(p,l,d),B(u,p,c),D(u,u,l),B(p,p,u),B(u,l,d),B(l,h,a),z(h,f),R(u,h,o),R(p,l,o);for(i=0;i<16;i++)a[i+16]=u[i],a[i+32]=p[i],a[i+48]=h[i],a[i+64]=l[i];var y=a.subarray(32),v=a.subarray(16);return H(y,y),B(v,v,y),U(t,v),0}function X(t,n){return F(t,n,i)}function J(t,n){return r(n,32),X(t,n)}function Y(t,n,e){var r=new Uint8Array(32);return F(r,e,n),m(t,o,r,w)}T.prototype.blocks=function(t,n,e){for(var r,o,i,s,a,c,u,h,p,l,f,d,y,v,g,b,m,w,_,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],P=this.h[3],O=this.h[4],A=this.h[5],E=this.h[6],x=this.h[7],L=this.h[8],R=this.h[9],U=this.r[0],j=this.r[1],M=this.r[2],I=this.r[3],D=this.r[4],N=this.r[5],B=this.r[6],z=this.r[7],H=this.r[8],q=this.r[9];e>=16;)l=p=0,l+=(k+=8191&(r=255&t[n+0]|(255&t[n+1])<<8))*U,l+=(C+=8191&(r>>>13|(o=255&t[n+2]|(255&t[n+3])<<8)<<3))*(5*q),l+=(T+=8191&(o>>>10|(i=255&t[n+4]|(255&t[n+5])<<8)<<6))*(5*H),l+=(P+=8191&(i>>>7|(s=255&t[n+6]|(255&t[n+7])<<8)<<9))*(5*z),p=(l+=(O+=8191&(s>>>4|(a=255&t[n+8]|(255&t[n+9])<<8)<<12))*(5*B))>>>13,l&=8191,l+=(A+=a>>>1&8191)*(5*N),l+=(E+=8191&(a>>>14|(c=255&t[n+10]|(255&t[n+11])<<8)<<2))*(5*D),l+=(x+=8191&(c>>>11|(u=255&t[n+12]|(255&t[n+13])<<8)<<5))*(5*I),l+=(L+=8191&(u>>>8|(h=255&t[n+14]|(255&t[n+15])<<8)<<8))*(5*M),f=p+=(l+=(R+=h>>>5|S)*(5*j))>>>13,f+=k*j,f+=C*U,f+=T*(5*q),f+=P*(5*H),p=(f+=O*(5*z))>>>13,f&=8191,f+=A*(5*B),f+=E*(5*N),f+=x*(5*D),f+=L*(5*I),p+=(f+=R*(5*M))>>>13,f&=8191,d=p,d+=k*M,d+=C*j,d+=T*U,d+=P*(5*q),p=(d+=O*(5*H))>>>13,d&=8191,d+=A*(5*z),d+=E*(5*B),d+=x*(5*N),d+=L*(5*D),y=p+=(d+=R*(5*I))>>>13,y+=k*I,y+=C*M,y+=T*j,y+=P*U,p=(y+=O*(5*q))>>>13,y&=8191,y+=A*(5*H),y+=E*(5*z),y+=x*(5*B),y+=L*(5*N),v=p+=(y+=R*(5*D))>>>13,v+=k*D,v+=C*I,v+=T*M,v+=P*j,p=(v+=O*U)>>>13,v&=8191,v+=A*(5*q),v+=E*(5*H),v+=x*(5*z),v+=L*(5*B),g=p+=(v+=R*(5*N))>>>13,g+=k*N,g+=C*D,g+=T*I,g+=P*M,p=(g+=O*j)>>>13,g&=8191,g+=A*U,g+=E*(5*q),g+=x*(5*H),g+=L*(5*z),b=p+=(g+=R*(5*B))>>>13,b+=k*B,b+=C*N,b+=T*D,b+=P*I,p=(b+=O*M)>>>13,b&=8191,b+=A*j,b+=E*U,b+=x*(5*q),b+=L*(5*H),m=p+=(b+=R*(5*z))>>>13,m+=k*z,m+=C*B,m+=T*N,m+=P*D,p=(m+=O*I)>>>13,m&=8191,m+=A*M,m+=E*j,m+=x*U,m+=L*(5*q),w=p+=(m+=R*(5*H))>>>13,w+=k*H,w+=C*z,w+=T*B,w+=P*N,p=(w+=O*D)>>>13,w&=8191,w+=A*I,w+=E*M,w+=x*j,w+=L*U,_=p+=(w+=R*(5*q))>>>13,_+=k*q,_+=C*H,_+=T*z,_+=P*B,p=(_+=O*N)>>>13,_&=8191,_+=A*D,_+=E*I,_+=x*M,_+=L*j,k=l=8191&(p=(p=((p+=(_+=R*U)>>>13)<<2)+p|0)+(l&=8191)|0),C=f+=p>>>=13,T=d&=8191,P=y&=8191,O=v&=8191,A=g&=8191,E=b&=8191,x=m&=8191,L=w&=8191,R=_&=8191,n+=16,e-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=P,this.h[4]=O,this.h[5]=A,this.h[6]=E,this.h[7]=x,this.h[8]=L,this.h[9]=R},T.prototype.finish=function(t,n){var e,r,o,i,s=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(e=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=e,e=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*e,e=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=e,e=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=e,s[0]=this.h[0]+5,e=s[0]>>>13,s[0]&=8191,i=1;i<10;i++)s[i]=this.h[i]+e,e=s[i]>>>13,s[i]&=8191;for(s[9]-=8192,r=(1^e)-1,i=0;i<10;i++)s[i]&=r;for(r=~r,i=0;i<10;i++)this.h[i]=this.h[i]&r|s[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;t[n+0]=this.h[0]>>>0&255,t[n+1]=this.h[0]>>>8&255,t[n+2]=this.h[1]>>>0&255,t[n+3]=this.h[1]>>>8&255,t[n+4]=this.h[2]>>>0&255,t[n+5]=this.h[2]>>>8&255,t[n+6]=this.h[3]>>>0&255,t[n+7]=this.h[3]>>>8&255,t[n+8]=this.h[4]>>>0&255,t[n+9]=this.h[4]>>>8&255,t[n+10]=this.h[5]>>>0&255,t[n+11]=this.h[5]>>>8&255,t[n+12]=this.h[6]>>>0&255,t[n+13]=this.h[6]>>>8&255,t[n+14]=this.h[7]>>>0&255,t[n+15]=this.h[7]>>>8&255},T.prototype.update=function(t,n,e){var r,o;if(this.leftover){for((o=16-this.leftover)>e&&(o=e),r=0;r=16&&(o=e-e%16,this.blocks(t,n,o),n+=o,e-=o),e){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+W,x[S]=e[k+0]<<24|e[k+1]<<16|e[k+2]<<8|e[k+3],L[S]=e[k+4]<<24|e[k+5]<<16|e[k+6]<<8|e[k+7];for(S=0;S<80;S++)if(o=R,i=U,s=j,a=M,c=I,u=D,h=N,B,l=z,f=H,d=q,y=F,v=X,g=J,b=Y,K,P=65535&(T=K),O=T>>>16,A=65535&(C=B),E=C>>>16,P+=65535&(T=(X>>>14|I<<18)^(X>>>18|I<<14)^(I>>>9|X<<23)),O+=T>>>16,A+=65535&(C=(I>>>14|X<<18)^(I>>>18|X<<14)^(X>>>9|I<<23)),E+=C>>>16,P+=65535&(T=X&J^~X&Y),O+=T>>>16,A+=65535&(C=I&D^~I&N),E+=C>>>16,P+=65535&(T=G[2*S+1]),O+=T>>>16,A+=65535&(C=G[2*S]),E+=C>>>16,C=x[S%16],O+=(T=L[S%16])>>>16,A+=65535&C,E+=C>>>16,A+=(O+=(P+=65535&T)>>>16)>>>16,P=65535&(T=_=65535&P|O<<16),O=T>>>16,A=65535&(C=w=65535&A|(E+=A>>>16)<<16),E=C>>>16,P+=65535&(T=(z>>>28|R<<4)^(R>>>2|z<<30)^(R>>>7|z<<25)),O+=T>>>16,A+=65535&(C=(R>>>28|z<<4)^(z>>>2|R<<30)^(z>>>7|R<<25)),E+=C>>>16,O+=(T=z&H^z&q^H&q)>>>16,A+=65535&(C=R&U^R&j^U&j),E+=C>>>16,p=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,m=65535&P|O<<16,P=65535&(T=y),O=T>>>16,A=65535&(C=a),E=C>>>16,O+=(T=_)>>>16,A+=65535&(C=w),E+=C>>>16,U=o,j=i,M=s,I=a=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,D=c,N=u,B=h,R=p,H=l,q=f,F=d,X=y=65535&P|O<<16,J=v,Y=g,K=b,z=m,S%16==15)for(k=0;k<16;k++)C=x[k],P=65535&(T=L[k]),O=T>>>16,A=65535&C,E=C>>>16,C=x[(k+9)%16],P+=65535&(T=L[(k+9)%16]),O+=T>>>16,A+=65535&C,E+=C>>>16,w=x[(k+1)%16],P+=65535&(T=((_=L[(k+1)%16])>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25)),O+=T>>>16,A+=65535&(C=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7),E+=C>>>16,w=x[(k+14)%16],O+=(T=((_=L[(k+14)%16])>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26))>>>16,A+=65535&(C=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6),E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,x[k]=65535&A|E<<16,L[k]=65535&P|O<<16;P=65535&(T=z),O=T>>>16,A=65535&(C=R),E=C>>>16,C=t[0],O+=(T=n[0])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[0]=R=65535&A|E<<16,n[0]=z=65535&P|O<<16,P=65535&(T=H),O=T>>>16,A=65535&(C=U),E=C>>>16,C=t[1],O+=(T=n[1])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[1]=U=65535&A|E<<16,n[1]=H=65535&P|O<<16,P=65535&(T=q),O=T>>>16,A=65535&(C=j),E=C>>>16,C=t[2],O+=(T=n[2])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[2]=j=65535&A|E<<16,n[2]=q=65535&P|O<<16,P=65535&(T=F),O=T>>>16,A=65535&(C=M),E=C>>>16,C=t[3],O+=(T=n[3])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[3]=M=65535&A|E<<16,n[3]=F=65535&P|O<<16,P=65535&(T=X),O=T>>>16,A=65535&(C=I),E=C>>>16,C=t[4],O+=(T=n[4])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[4]=I=65535&A|E<<16,n[4]=X=65535&P|O<<16,P=65535&(T=J),O=T>>>16,A=65535&(C=D),E=C>>>16,C=t[5],O+=(T=n[5])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[5]=D=65535&A|E<<16,n[5]=J=65535&P|O<<16,P=65535&(T=Y),O=T>>>16,A=65535&(C=N),E=C>>>16,C=t[6],O+=(T=n[6])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[6]=N=65535&A|E<<16,n[6]=Y=65535&P|O<<16,P=65535&(T=K),O=T>>>16,A=65535&(C=B),E=C>>>16,C=t[7],O+=(T=n[7])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[7]=B=65535&A|E<<16,n[7]=K=65535&P|O<<16,W+=128,r-=128}return r}function Z(t,n,e){var r,o=new Int32Array(8),i=new Int32Array(8),s=new Uint8Array(256),a=e;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,V(o,i,n,e),e%=128,r=0;r=0;--o)Q(t,n,r=e[o/8|0]>>(7&o)&1),$(n,t),$(t,t),Q(t,n,r)}function et(t,e){var r=[n(),n(),n(),n()];x(r[0],p),x(r[1],l),x(r[2],a),B(r[3],p,l),nt(t,r,e)}function rt(t,e,o){var i,s=new Uint8Array(64),a=[n(),n(),n(),n()];for(o||r(e,32),Z(s,e,32),s[0]&=248,s[31]&=127,s[31]|=64,et(a,s),tt(t,a),i=0;i<32;i++)e[i+32]=t[i];return 0}var ot=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function it(t,n){var e,r,o,i;for(r=63;r>=32;--r){for(e=0,o=r-32,i=r-12;o>4)*ot[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*ot[o];for(r=0;r<32;r++)n[r+1]+=n[r]>>8,t[r]=255&n[r]}function st(t){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=t[n];for(n=0;n<64;n++)t[n]=0;it(t,e)}function at(t,e,r,o){var i,s,a=new Uint8Array(64),c=new Uint8Array(64),u=new Uint8Array(64),h=new Float64Array(64),p=[n(),n(),n(),n()];Z(a,o,32),a[0]&=248,a[31]&=127,a[31]|=64;var l=r+64;for(i=0;i>7&&N(t[0],s,t[0]),B(t[3],t[0],t[1]),0)}(l,o))return-1;for(i=0;i=0},t.sign.keyPair=function(){var t=new Uint8Array(32),n=new Uint8Array(64);return rt(t,n),{publicKey:t,secretKey:n}},t.sign.keyPair.fromSecretKey=function(t){if(ht(t),64!==t.length)throw new Error("bad secret key size");for(var n=new Uint8Array(32),e=0;e0)r.loading[t].push(e);else{r.loading[t]=[e];var o=Tn.createScriptRequest(r.getPath(t,n)),i=r.receivers.create((function(n){if(r.receivers.remove(i),r.loading[t]){var e=r.loading[t];delete r.loading[t];for(var s=function(t){t||o.cleanup()},a=0;a>>6)+C(128|63&n):C(224|n>>>12&15)+C(128|n>>>6&63)+C(128|63&n)},x=function(t){return t.replace(/[^\x00-\x7F]/g,E)},L=function(t){var n=[0,2,1][t.length%3],e=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[T.charAt(e>>>18),T.charAt(e>>>12&63),n>=2?"=":T.charAt(e>>>6&63),n>=1?"=":T.charAt(63&e)].join("")},R=window.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,L)},U=function(){function t(t,n,e,r){var o=this;this.clear=n,this.timer=t((function(){o.timer&&(o.timer=r(o.timer))}),e)}return t.prototype.isRunning=function(){return null!==this.timer},t.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},t}(),j=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}();function M(t){window.clearTimeout(t)}function I(t){window.clearInterval(t)}var D=function(t){function n(n,e){return t.call(this,setTimeout,M,n,(function(t){return e(),null}))||this}return j(n,t),n}(U),N=function(t){function n(n,e){return t.call(this,setInterval,I,n,(function(t){return e(),t}))||this}return j(n,t),n}(U),B={now:function(){return Date.now?Date.now():(new Date).valueOf()},defer:function(t){return new D(0,t)},method:function(t){for(var n=[],e=1;e0)for(r=0;r=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}},xt=Et,Lt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),Rt=function(t){function n(n,e){var r=t.call(this)||this;return r.id=n,r.transport=e,r.activityTimeout=e.activityTimeout,r.bindListeners(),r}return Lt(n,t),n.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},n.prototype.send=function(t){return this.transport.send(t)},n.prototype.send_event=function(t,n,e){var r={event:t,data:n};return e&&(r.channel=e),Q.debug("Event sent",r),this.send(xt.encodeMessage(r))},n.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},n.prototype.close=function(){this.transport.close()},n.prototype.bindListeners=function(){var t=this,n={message:function(n){var e;try{e=xt.decodeMessage(n)}catch(e){t.emit("error",{type:"MessageParseError",error:e,data:n.data})}if(void 0!==e){switch(Q.debug("Event recd",e),e.event){case"pusher:error":t.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":t.emit("ping");break;case"pusher:pong":t.emit("pong")}t.emit("message",e)}},activity:function(){t.emit("activity")},error:function(n){t.emit("error",n)},closed:function(n){e(),n&&n.code&&t.handleCloseEvent(n),t.transport=null,t.emit("closed")}},e=function(){F(n,(function(n,e){t.transport.unbind(e,n)}))};F(n,(function(n,e){t.transport.bind(e,n)}))},n.prototype.handleCloseEvent=function(t){var n=xt.getCloseAction(t),e=xt.getCloseError(t);e&&this.emit("error",e),n&&this.emit(n,{action:n,error:e})},n}(pt),Ut=function(){function t(t,n){this.transport=t,this.callback=n,this.bindListeners()}return t.prototype.close=function(){this.unbindListeners(),this.transport.close()},t.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){var e;t.unbindListeners();try{e=xt.processHandshake(n)}catch(n){return t.finish("error",{error:n}),void t.transport.close()}"connected"===e.action?t.finish("connected",{connection:new Rt(e.id,t.transport),activityTimeout:e.activityTimeout}):(t.finish(e.action,{error:e.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var e=xt.getCloseAction(n)||"backoff",r=xt.getCloseError(n);t.finish(e,{error:r})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},t.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},t.prototype.finish=function(t,n){this.callback(z({transport:this.transport,action:t},n))},t}(),jt=function(){function t(t,n){this.timeline=t,this.options=n||{}}return t.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(Tn.TimelineTransport.getAgent(this,t),n)},t}(),Mt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),It=function(t){function n(n,e){var r=t.call(this,(function(t,e){Q.debug("No callbacks on "+n+" for "+t)}))||this;return r.name=n,r.pusher=e,r.subscribed=!1,r.subscriptionPending=!1,r.subscriptionCancelled=!1,r}return Mt(n,t),n.prototype.authorize=function(t,n){return n(null,{auth:""})},n.prototype.trigger=function(t,n){if(0!==t.indexOf("client-"))throw new d("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var e=p("triggeringClientEvents");Q.warn("Client event triggered before channel 'subscription_succeeded' event . "+e)}return this.pusher.send_event(t,n,this.name)},n.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},n.prototype.handleEvent=function(t){var n=t.event,e=t.data;if("pusher_internal:subscription_succeeded"===n)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===n)this.handleSubscriptionCountEvent(t);else if(0!==n.indexOf("pusher_internal:")){this.emit(n,e,{})}},n.prototype.handleSubscriptionSucceededEvent=function(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)},n.prototype.handleSubscriptionCountEvent=function(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)},n.prototype.subscribe=function(){var t=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(function(n,e){n?(t.subscriptionPending=!1,Q.error(n.toString()),t.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:n.message},n instanceof S?{status:n.status}:{}))):t.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:t.name})})))},n.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},n.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},n.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},n}(pt),Dt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),Nt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return Dt(n,t),n.prototype.authorize=function(t,n){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},n)},n}(It),Bt=function(){function t(){this.reset()}return t.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},t.prototype.each=function(t){var n=this;F(this.members,(function(e,r){t(n.get(r))}))},t.prototype.setMyID=function(t){this.myID=t},t.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},t.prototype.addMember=function(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},t.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},t.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},t}(),zt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),Ht=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}c((r=r.apply(t,n||[])).next())}))},qt=function(t,n){var e,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(e)throw new TypeError("Generator is already executing.");for(;s;)try{if(e=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new D(t||0,(function(){n.disconnectInternally(),n.connect()}))},n.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},n.prototype.setUnavailableTimer=function(){var t=this;this.unavailableTimer=new D(this.options.unavailableTimeout,(function(){t.updateState("unavailable")}))},n.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},n.prototype.sendActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new D(this.options.pongTimeout,(function(){t.timeline.error({pong_timed_out:t.options.pongTimeout}),t.retryIn(0)}))},n.prototype.resetActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new D(this.activityTimeout,(function(){t.sendActivityCheck()})))},n.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},n.prototype.buildConnectionCallbacks=function(t){var n=this;return z({},t,{message:function(t){n.resetActivityCheck(),n.emit("message",t)},ping:function(){n.send_event("pusher:pong",{})},activity:function(){n.resetActivityCheck()},error:function(t){n.emit("error",t)},closed:function(){n.abandonConnection(),n.shouldRetry()&&n.retryIn(1e3)}})},n.prototype.buildHandshakeCallbacks=function(t){var n=this;return z({},t,{connected:function(t){n.activityTimeout=Math.min(n.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),n.clearUnavailableTimer(),n.setConnection(t.connection),n.socket_id=n.connection.id,n.updateState("connected",{socket_id:n.socket_id})}})},n.prototype.buildErrorCallbacks=function(){var t=this,n=function(n){return function(e){e.error&&t.emit("error",{type:"WebSocketError",error:e.error}),n(e)}};return{tls_only:n((function(){t.usingTLS=!0,t.updateStrategy(),t.retryIn(0)})),refused:n((function(){t.disconnect()})),backoff:n((function(){t.retryIn(1e3)})),retry:n((function(){t.retryIn(0)}))}},n.prototype.setConnection=function(t){for(var n in this.connection=t,this.connectionCallbacks)this.connection.bind(n,this.connectionCallbacks[n]);this.resetActivityCheck()},n.prototype.abandonConnection=function(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var n=this.connection;return this.connection=null,n}},n.prototype.updateState=function(t,n){var e=this.state;if(this.state=t,e!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+n.socket_id),Q.debug("State changed",e+" -> "+r),this.timeline.info({state:t,params:n}),this.emit("state_change",{previous:e,current:t}),this.emit(t,n)}},n.prototype.shouldRetry=function(){return"connecting"===this.state||"connected"===this.state},n}(pt),Vt=function(){function t(){this.channels={}}return t.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=function(t,n){if(0===t.indexOf("private-encrypted-")){if(n.config.nacl)return Zt.createEncryptedChannel(t,n,n.config.nacl);var e=p("encryptedChannelSupport");throw new m("Tried to subscribe to a private-encrypted- channel but no nacl implementation available. "+e)}if(0===t.indexOf("private-"))return Zt.createPrivateChannel(t,n);if(0===t.indexOf("presence-"))return Zt.createPresenceChannel(t,n);if(0===t.indexOf("#"))throw new y('Cannot create a channel with name "'+t+'".');return Zt.createChannel(t,n)}(t,n)),this.channels[t]},t.prototype.all=function(){return function(t){var n=[];return F(t,(function(t){n.push(t)})),n}(this.channels)},t.prototype.find=function(t){return this.channels[t]},t.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},t.prototype.disconnect=function(){F(this.channels,(function(t){t.disconnect()}))},t}();var Zt={createChannels:function(){return new Vt},createConnectionManager:function(t,n){return new Gt(t,n)},createChannel:function(t,n){return new It(t,n)},createPrivateChannel:function(t,n){return new Nt(t,n)},createPresenceChannel:function(t,n){return new Ft(t,n)},createEncryptedChannel:function(t,n,e){return new Kt(t,n,e)},createTimelineSender:function(t,n){return new jt(t,n)},createHandshake:function(t,n){return new Ut(t,n)},createAssistantToTheTransportManager:function(t,n,e){return new At(t,n,e)}},$t=function(){function t(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return t.prototype.getAssistant=function(t){return Zt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},t.prototype.isAlive=function(){return this.livesLeft>0},t.prototype.reportDeath=function(){this.livesLeft-=1},t}(),Qt=function(){function t(t,n){this.strategies=t,this.loop=Boolean(n.loop),this.failFast=Boolean(n.failFast),this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return t.prototype.isSupported=function(){return G(this.strategies,B.method("isSupported"))},t.prototype.connect=function(t,n){var e=this,r=this.strategies,o=0,i=this.timeout,s=null,a=function(c,u){u?n(null,u):(o+=1,e.loop&&(o%=r.length),o0&&(o=new D(e.timeout,(function(){i.abort(),r(!0)}))),i=t.connect(n,(function(t,n){t&&o&&o.isRunning()&&!e.failFast||(o&&o.ensureAborted(),r(t,n))})),{abort:function(){o&&o.ensureAborted(),i.abort()},forceMinPriority:function(t){i.forceMinPriority(t)}}},t}(),tn=function(){function t(t){this.strategies=t}return t.prototype.isSupported=function(){return G(this.strategies,B.method("isSupported"))},t.prototype.connect=function(t,n){return function(t,n,e){var r=Y(t,(function(t,r,o,i){return t.connect(n,e(r,i))}));return{abort:function(){J(r,nn)},forceMinPriority:function(t){J(r,(function(n){n.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,e){return function(r,o){e[t].error=r,r?function(t){return function(t,n){for(var e=0;e=B.now()){var i=this.transports[r.transport];i&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),o.push(new Qt([i],{timeout:2*r.latency+1e3,failFast:!0})))}var s=B.now(),a=o.pop().connect(t,(function r(i,c){i?(on(e),o.length>0?(s=B.now(),a=o.pop().connect(t,r)):n(i)):(!function(t,n,e){var r=Tn.getLocalStorage();if(r)try{r[rn(t)]=$({timestamp:B.now(),transport:n,latency:e})}catch(t){}}(e,c.transport.name,B.now()-s),n(null,c))}));return{abort:function(){a.abort()},forceMinPriority:function(n){t=n,a&&a.forceMinPriority(n)}}},t}();function rn(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function on(t){var n=Tn.getLocalStorage();if(n)try{delete n[rn(t)]}catch(t){}}var sn=function(){function t(t,n){var e=n.delay;this.strategy=t,this.options={delay:e}}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e,r=this.strategy,o=new D(this.options.delay,(function(){e=r.connect(t,n)}));return{abort:function(){o.ensureAborted(),e&&e.abort()},forceMinPriority:function(n){t=n,e&&e.forceMinPriority(n)}}},t}(),an=function(){function t(t,n,e){this.test=t,this.trueBranch=n,this.falseBranch=e}return t.prototype.isSupported=function(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()},t.prototype.connect=function(t,n){return(this.test()?this.trueBranch:this.falseBranch).connect(t,n)},t}(),cn=function(){function t(t){this.strategy=t}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e=this.strategy.connect(t,(function(t,r){r&&e.abort(),n(t,r)}));return e},t}();function un(t){return function(){return t.isSupported()}}var hn,pn=function(t,n,e){var r={};function o(n,o,i,s,a){var c=e(t,n,o,i,s,a);return r[n]=c,c}var i,s=Object.assign({},n,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=Object.assign({},s,{useTLS:!0}),c=Object.assign({},n,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),u={loop:!0,timeout:15e3,timeoutLimit:6e4},h=new $t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),p=new $t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=o("ws","ws",3,s,h),f=o("wss","ws",3,a,h),d=o("sockjs","sockjs",1,c),y=o("xhr_streaming","xhr_streaming",1,c,p),v=o("xdr_streaming","xdr_streaming",1,c,p),g=o("xhr_polling","xhr_polling",1,c),b=o("xdr_polling","xdr_polling",1,c),m=new Qt([l],u),w=new Qt([f],u),_=new Qt([d],u),S=new Qt([new an(un(y),y,v)],u),k=new Qt([new an(un(g),g,b)],u),C=new Qt([new an(un(S),new tn([S,new sn(k,{delay:4e3})]),k)],u),T=new an(un(C),C,_);return i=n.useTLS?new tn([m,new sn(T,{delay:2e3})]):new tn([m,new sn(w,{delay:2e3}),new sn(T,{delay:5e3})]),new en(new cn(new an(un(l),i,T)),r,{ttl:18e5,timeline:n.timeline,useTLS:n.useTLS})},ln={getRequest:function(t){var n=new window.XDomainRequest;return n.ontimeout=function(){t.emit("error",new v),t.close()},n.onerror=function(n){t.emit("error",n),t.close()},n.onprogress=function(){n.responseText&&n.responseText.length>0&&t.onChunk(200,n.responseText)},n.onload=function(){n.responseText&&n.responseText.length>0&&t.onChunk(200,n.responseText),t.emit("finished",200),t.close()},n},abortRequest:function(t){t.ontimeout=t.onerror=t.onprogress=t.onload=null,t.abort()}},fn=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),dn=function(t){function n(n,e,r){var o=t.call(this)||this;return o.hooks=n,o.method=e,o.url=r,o}return fn(n,t),n.prototype.start=function(t){var n=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){n.close()},Tn.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)},n.prototype.close=function(){this.unloader&&(Tn.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},n.prototype.onChunk=function(t,n){for(;;){var e=this.advanceBuffer(n);if(!e)break;this.emit("chunk",{status:t,data:e})}this.isBufferTooLong(n)&&this.emit("buffer_too_long")},n.prototype.advanceBuffer=function(t){var n=t.slice(this.position),e=n.indexOf("\n");return-1!==e?(this.position+=e+1,n.slice(0,e)):null},n.prototype.isBufferTooLong=function(t){return this.position===t.length&&t.length>262144},n}(pt);!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(hn||(hn={}));var yn=hn,vn=1;function gn(t){var n=-1===t.indexOf("?")?"?":"&";return t+n+"t="+ +new Date+"&n="+vn++}function bn(t){return Tn.randomInt(t)}var mn,wn=function(){function t(t,n){this.hooks=t,this.session=bn(1e3)+"/"+function(t){for(var n=[],e=0;e0&&t.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&t.onChunk(n.status,n.responseText),t.emit("finished",n.status),t.close()}},n},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},Cn={createStreamingSocket:function(t){return this.createSocket(_n,t)},createPollingSocket:function(t){return this.createSocket(Sn,t)},createSocket:function(t,n){return new wn(t,n)},createXHR:function(t,n){return this.createRequest(kn,t,n)},createRequest:function(t,n,e){return new dn(t,n,e)},createXDR:function(t,n){return this.createRequest(ln,t,n)}},Tn={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:i,DependenciesReceivers:c,getDefaultStrategy:pn,Transports:Tt,transportConnectionInitializer:function(){var t=this;t.timeline.info(t.buildTimelineMessage({transport:t.name+(t.options.useTLS?"s":"")})),t.hooks.isInitialized()?t.changeState("initialized"):t.hooks.file?(t.changeState("initializing"),u.load(t.hooks.file,{useTLS:t.options.useTLS},(function(n,e){t.hooks.isInitialized()?(t.changeState("initialized"),e(!0)):(n&&t.onError(n),t.onClose(),e(!1))}))):t.onClose()},HTTPFactory:Cn,TimelineTransport:rt,getXHRAPI:function(){return window.XMLHttpRequest},getWebSocketAPI:function(){return window.WebSocket||window.MozWebSocket},setup:function(t){var n=this;window.Pusher=t;var e=function(){n.onDocumentBody(t.ready)};window.JSON?e():u.load("json2",{},e)},getDocument:function(){return document},getProtocol:function(){return this.getDocument().location.protocol},getAuthorizers:function(){return{ajax:k,jsonp:tt}},onDocumentBody:function(t){var n=this;document.body?t():setTimeout((function(){n.onDocumentBody(t)}),0)},createJSONPRequest:function(t,n){return new et(t,n)},createScriptRequest:function(t){return new nt(t)},getLocalStorage:function(){try{return window.localStorage}catch(t){return}},createXHR:function(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest:function(){return new(this.getXHRAPI())},createMicrosoftXHR:function(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork:function(){return Ot},createWebSocket:function(t){return new(this.getWebSocketAPI())(t)},createSocketRequest:function(t,n){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,n);if(this.isXDRSupported(0===n.indexOf("https:")))return this.HTTPFactory.createXDR(t,n);throw"Cross-origin HTTP requests are not supported"},isXHRSupported:function(){var t=this.getXHRAPI();return Boolean(t)&&void 0!==(new t).withCredentials},isXDRSupported:function(t){var n=t?"https:":"http:",e=this.getProtocol();return Boolean(window.XDomainRequest)&&e===n},addUnloadListener:function(t){void 0!==window.addEventListener?window.addEventListener("unload",t,!1):void 0!==window.attachEvent&&window.attachEvent("onunload",t)},removeUnloadListener:function(t){void 0!==window.addEventListener?window.removeEventListener("unload",t,!1):void 0!==window.detachEvent&&window.detachEvent("onunload",t)},randomInt:function(t){return Math.floor((window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)}};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(mn||(mn={}));var Pn=mn,On=function(){function t(t,n,e){this.key=t,this.session=n,this.events=[],this.options=e||{},this.sent=0,this.uniqueID=0}return t.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(z({},n,{timestamp:B.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},t.prototype.error=function(t){this.log(Pn.ERROR,t)},t.prototype.info=function(t){this.log(Pn.INFO,t)},t.prototype.debug=function(t){this.log(Pn.DEBUG,t)},t.prototype.isEmpty=function(){return 0===this.events.length},t.prototype.send=function(t,n){var e=this,r=z({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(r,(function(t,r){t||e.sent++,n&&n(t,r)})),!0},t.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},t}(),An=function(){function t(t,n,e,r){this.name=t,this.priority=n,this.transport=e,this.options=r||{}}return t.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},t.prototype.connect=function(t,n){var e=this;if(!this.isSupported())return En(new _,n);if(this.priority>>18&63),e+=this._encodeByte(r>>>12&63),e+=this._encodeByte(r>>>6&63),e+=this._encodeByte(r>>>0&63)}var i=t.length-n;if(i>0){r=t[n]<<16|(2===i?t[n+1]<<8:0);e+=this._encodeByte(r>>>18&63),e+=this._encodeByte(r>>>12&63),e+=2===i?this._encodeByte(r>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,r=new Uint8Array(this.maxDecodedLength(n)),i=0,s=0,o=0,a=0,c=0,h=0,u=0;s>>4,r[i++]=c<<4|h>>>2,r[i++]=h<<6|u,o|=256&a,o|=256&c,o|=256&h,o|=256&u;if(s>>4,o|=256&a,o|=256&c),s>>2,o|=256&h),s>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=s;var o=new s;e.encode=function(t){return o.encode(t)},e.decode=function(t){return o.decode(t)};var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(s);e.URLSafeCoder=a;var c=new a;e.encodeURLSafe=function(t){return c.encode(t)},e.decodeURLSafe=function(t){return c.decode(t)},e.encodedLength=function(t){return o.encodedLength(t)},e.maxDecodedLength=function(t){return o.maxDecodedLength(t)},e.decodedLength=function(t){return o.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="utf8: invalid source encoding";function i(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(i(t)),n=0,r=0;r>6,e[n++]=128|63&s):s<55296?(e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s):(r++,s=(1023&s)<<10,s|=1023&t.charCodeAt(r),s+=65536,e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s)}return e},e.encodedLength=i,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(r);if(128!=(192&(o=t[++n])))throw new Error(r);i=(31&i)<<6|63&o,s=128}else if(i<240){if(n>=t.length-1)throw new Error(r);var o=t[++n],a=t[++n];if(128!=(192&o)||128!=(192&a))throw new Error(r);i=(15&i)<<12|(63&o)<<6|63&a,s=2048}else{if(!(i<248))throw new Error(r);if(n>=t.length-2)throw new Error(r);o=t[++n],a=t[++n];var c=t[++n];if(128!=(192&o)||128!=(192&a)||128!=(192&c))throw new Error(r);i=(15&i)<<18|(63&o)<<12|(63&a)<<6|63&c,s=65536}if(i=55296&&i<=57343)throw new Error(r);if(i>=65536){if(i>1114111)throw new Error(r);i-=65536,e.push(String.fromCharCode(55296|i>>10)),i=56320|1023&i}}e.push(String.fromCharCode(i))}return e.join("")}},function(t,e,n){!function(t){"use strict";var e=function(t){var e,n=new Float64Array(16);if(t)for(e=0;e>24&255,t[e+1]=n>>16&255,t[e+2]=n>>8&255,t[e+3]=255&n,t[e+4]=r>>24&255,t[e+5]=r>>16&255,t[e+6]=r>>8&255,t[e+7]=255&r}function g(t,e,n,r,i){var s,o=0;for(s=0;s>>8)-1}function v(t,e,n,r){return g(t,e,n,r,16)}function b(t,e,n,r){return g(t,e,n,r,32)}function y(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,h=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,f=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=s,S=o,k=a,C=c,T=h,E=u,P=l,x=d,A=p,O=f,L=g,R=v,U=b,M=y,I=m,D=w,N=0;N<20;N+=2)_^=(i=(U^=(i=(A^=(i=(T^=(i=_+U|0)<<7|i>>>25)+_|0)<<9|i>>>23)+T|0)<<13|i>>>19)+A|0)<<18|i>>>14,E^=(i=(S^=(i=(M^=(i=(O^=(i=E+S|0)<<7|i>>>25)+E|0)<<9|i>>>23)+O|0)<<13|i>>>19)+M|0)<<18|i>>>14,L^=(i=(P^=(i=(k^=(i=(I^=(i=L+P|0)<<7|i>>>25)+L|0)<<9|i>>>23)+I|0)<<13|i>>>19)+k|0)<<18|i>>>14,D^=(i=(R^=(i=(x^=(i=(C^=(i=D+R|0)<<7|i>>>25)+D|0)<<9|i>>>23)+C|0)<<13|i>>>19)+x|0)<<18|i>>>14,_^=(i=(C^=(i=(k^=(i=(S^=(i=_+C|0)<<7|i>>>25)+_|0)<<9|i>>>23)+S|0)<<13|i>>>19)+k|0)<<18|i>>>14,E^=(i=(T^=(i=(x^=(i=(P^=(i=E+T|0)<<7|i>>>25)+E|0)<<9|i>>>23)+P|0)<<13|i>>>19)+x|0)<<18|i>>>14,L^=(i=(O^=(i=(A^=(i=(R^=(i=L+O|0)<<7|i>>>25)+L|0)<<9|i>>>23)+R|0)<<13|i>>>19)+A|0)<<18|i>>>14,D^=(i=(I^=(i=(M^=(i=(U^=(i=D+I|0)<<7|i>>>25)+D|0)<<9|i>>>23)+U|0)<<13|i>>>19)+M|0)<<18|i>>>14;_=_+s|0,S=S+o|0,k=k+a|0,C=C+c|0,T=T+h|0,E=E+u|0,P=P+l|0,x=x+d|0,A=A+p|0,O=O+f|0,L=L+g|0,R=R+v|0,U=U+b|0,M=M+y|0,I=I+m|0,D=D+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=E>>>0&255,t[21]=E>>>8&255,t[22]=E>>>16&255,t[23]=E>>>24&255,t[24]=P>>>0&255,t[25]=P>>>8&255,t[26]=P>>>16&255,t[27]=P>>>24&255,t[28]=x>>>0&255,t[29]=x>>>8&255,t[30]=x>>>16&255,t[31]=x>>>24&255,t[32]=A>>>0&255,t[33]=A>>>8&255,t[34]=A>>>16&255,t[35]=A>>>24&255,t[36]=O>>>0&255,t[37]=O>>>8&255,t[38]=O>>>16&255,t[39]=O>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=R>>>0&255,t[45]=R>>>8&255,t[46]=R>>>16&255,t[47]=R>>>24&255,t[48]=U>>>0&255,t[49]=U>>>8&255,t[50]=U>>>16&255,t[51]=U>>>24&255,t[52]=M>>>0&255,t[53]=M>>>8&255,t[54]=M>>>16&255,t[55]=M>>>24&255,t[56]=I>>>0&255,t[57]=I>>>8&255,t[58]=I>>>16&255,t[59]=I>>>24&255,t[60]=D>>>0&255,t[61]=D>>>8&255,t[62]=D>>>16&255,t[63]=D>>>24&255}(t,e,n,r)}function m(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,h=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,f=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=0;_<20;_+=2)s^=(i=(b^=(i=(p^=(i=(h^=(i=s+b|0)<<7|i>>>25)+s|0)<<9|i>>>23)+h|0)<<13|i>>>19)+p|0)<<18|i>>>14,u^=(i=(o^=(i=(y^=(i=(f^=(i=u+o|0)<<7|i>>>25)+u|0)<<9|i>>>23)+f|0)<<13|i>>>19)+y|0)<<18|i>>>14,g^=(i=(l^=(i=(a^=(i=(m^=(i=g+l|0)<<7|i>>>25)+g|0)<<9|i>>>23)+m|0)<<13|i>>>19)+a|0)<<18|i>>>14,w^=(i=(v^=(i=(d^=(i=(c^=(i=w+v|0)<<7|i>>>25)+w|0)<<9|i>>>23)+c|0)<<13|i>>>19)+d|0)<<18|i>>>14,s^=(i=(c^=(i=(a^=(i=(o^=(i=s+c|0)<<7|i>>>25)+s|0)<<9|i>>>23)+o|0)<<13|i>>>19)+a|0)<<18|i>>>14,u^=(i=(h^=(i=(d^=(i=(l^=(i=u+h|0)<<7|i>>>25)+u|0)<<9|i>>>23)+l|0)<<13|i>>>19)+d|0)<<18|i>>>14,g^=(i=(f^=(i=(p^=(i=(v^=(i=g+f|0)<<7|i>>>25)+g|0)<<9|i>>>23)+v|0)<<13|i>>>19)+p|0)<<18|i>>>14,w^=(i=(m^=(i=(y^=(i=(b^=(i=w+m|0)<<7|i>>>25)+w|0)<<9|i>>>23)+b|0)<<13|i>>>19)+y|0)<<18|i>>>14;t[0]=s>>>0&255,t[1]=s>>>8&255,t[2]=s>>>16&255,t[3]=s>>>24&255,t[4]=u>>>0&255,t[5]=u>>>8&255,t[6]=u>>>16&255,t[7]=u>>>24&255,t[8]=g>>>0&255,t[9]=g>>>8&255,t[10]=g>>>16&255,t[11]=g>>>24&255,t[12]=w>>>0&255,t[13]=w>>>8&255,t[14]=w>>>16&255,t[15]=w>>>24&255,t[16]=l>>>0&255,t[17]=l>>>8&255,t[18]=l>>>16&255,t[19]=l>>>24&255,t[20]=d>>>0&255,t[21]=d>>>8&255,t[22]=d>>>16&255,t[23]=d>>>24&255,t[24]=p>>>0&255,t[25]=p>>>8&255,t[26]=p>>>16&255,t[27]=p>>>24&255,t[28]=f>>>0&255,t[29]=f>>>8&255,t[30]=f>>>16&255,t[31]=f>>>24&255}(t,e,n,r)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function _(t,e,n,r,i,s,o){var a,c,h=new Uint8Array(16),u=new Uint8Array(64);for(c=0;c<16;c++)h[c]=0;for(c=0;c<8;c++)h[c]=s[c];for(;i>=64;){for(y(u,h,o,w),c=0;c<64;c++)t[e+c]=n[r+c]^u[c];for(a=1,c=8;c<16;c++)a=a+(255&h[c])|0,h[c]=255&a,a>>>=8;i-=64,e+=64,r+=64}if(i>0)for(y(u,h,o,w),c=0;c=64;){for(y(c,a,i,w),o=0;o<64;o++)t[e+o]=c[o];for(s=1,o=8;o<16;o++)s=s+(255&a[o])|0,a[o]=255&s,s>>>=8;n-=64,e+=64}if(n>0)for(y(c,a,i,w),o=0;o>>13|n<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(n>>>10|r<<6),i=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|i<<9),s=255&t[8]|(255&t[9])<<8,this.r[4]=255&(i>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(s>>>14|o<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(o>>>11|a<<5),c=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function E(t,e,n,r,i,s){var o=new T(s);return o.update(n,r,i),o.finish(t,e),0}function P(t,e,n,r,i,s){var o=new Uint8Array(16);return E(o,0,n,r,i,s),v(t,e,o,0)}function x(t,e,n,r,i){var s;if(n<32)return-1;for(C(t,0,e,0,n,r,i),E(t,16,t,32,n-32,t),s=0;s<16;s++)t[s]=0;return 0}function A(t,e,n,r,i){var s,o=new Uint8Array(32);if(n<32)return-1;if(k(o,0,32,r,i),0!==P(e,16,e,32,n-32,o))return-1;for(C(t,0,e,0,n,r,i),s=0;s<32;s++)t[s]=0;return 0}function O(t,e){var n;for(n=0;n<16;n++)t[n]=0|e[n]}function L(t){var e,n,r=1;for(e=0;e<16;e++)n=t[e]+r+65535,r=Math.floor(n/65536),t[e]=n-65536*r;t[0]+=r-1+37*(r-1)}function R(t,e,n){for(var r,i=~(n-1),s=0;s<16;s++)r=i&(t[s]^e[s]),t[s]^=r,e[s]^=r}function U(t,n){var r,i,s,o=e(),a=e();for(r=0;r<16;r++)a[r]=n[r];for(L(a),L(a),L(a),i=0;i<2;i++){for(o[0]=a[0]-65517,r=1;r<15;r++)o[r]=a[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,R(a,o,1-s)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function M(t,e){var n=new Uint8Array(32),r=new Uint8Array(32);return U(n,t),U(r,e),b(n,0,r,0)}function I(t){var e=new Uint8Array(32);return U(e,t),1&e[0]}function D(t,e){var n;for(n=0;n<16;n++)t[n]=e[2*n]+(e[2*n+1]<<8);t[15]&=32767}function N(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]+n[r]}function j(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]-n[r]}function B(t,e,n){var r,i,s=0,o=0,a=0,c=0,h=0,u=0,l=0,d=0,p=0,f=0,g=0,v=0,b=0,y=0,m=0,w=0,_=0,S=0,k=0,C=0,T=0,E=0,P=0,x=0,A=0,O=0,L=0,R=0,U=0,M=0,I=0,D=n[0],N=n[1],j=n[2],B=n[3],z=n[4],H=n[5],q=n[6],F=n[7],X=n[8],J=n[9],Y=n[10],K=n[11],$=n[12],W=n[13],G=n[14],V=n[15];s+=(r=e[0])*D,o+=r*N,a+=r*j,c+=r*B,h+=r*z,u+=r*H,l+=r*q,d+=r*F,p+=r*X,f+=r*J,g+=r*Y,v+=r*K,b+=r*$,y+=r*W,m+=r*G,w+=r*V,o+=(r=e[1])*D,a+=r*N,c+=r*j,h+=r*B,u+=r*z,l+=r*H,d+=r*q,p+=r*F,f+=r*X,g+=r*J,v+=r*Y,b+=r*K,y+=r*$,m+=r*W,w+=r*G,_+=r*V,a+=(r=e[2])*D,c+=r*N,h+=r*j,u+=r*B,l+=r*z,d+=r*H,p+=r*q,f+=r*F,g+=r*X,v+=r*J,b+=r*Y,y+=r*K,m+=r*$,w+=r*W,_+=r*G,S+=r*V,c+=(r=e[3])*D,h+=r*N,u+=r*j,l+=r*B,d+=r*z,p+=r*H,f+=r*q,g+=r*F,v+=r*X,b+=r*J,y+=r*Y,m+=r*K,w+=r*$,_+=r*W,S+=r*G,k+=r*V,h+=(r=e[4])*D,u+=r*N,l+=r*j,d+=r*B,p+=r*z,f+=r*H,g+=r*q,v+=r*F,b+=r*X,y+=r*J,m+=r*Y,w+=r*K,_+=r*$,S+=r*W,k+=r*G,C+=r*V,u+=(r=e[5])*D,l+=r*N,d+=r*j,p+=r*B,f+=r*z,g+=r*H,v+=r*q,b+=r*F,y+=r*X,m+=r*J,w+=r*Y,_+=r*K,S+=r*$,k+=r*W,C+=r*G,T+=r*V,l+=(r=e[6])*D,d+=r*N,p+=r*j,f+=r*B,g+=r*z,v+=r*H,b+=r*q,y+=r*F,m+=r*X,w+=r*J,_+=r*Y,S+=r*K,k+=r*$,C+=r*W,T+=r*G,E+=r*V,d+=(r=e[7])*D,p+=r*N,f+=r*j,g+=r*B,v+=r*z,b+=r*H,y+=r*q,m+=r*F,w+=r*X,_+=r*J,S+=r*Y,k+=r*K,C+=r*$,T+=r*W,E+=r*G,P+=r*V,p+=(r=e[8])*D,f+=r*N,g+=r*j,v+=r*B,b+=r*z,y+=r*H,m+=r*q,w+=r*F,_+=r*X,S+=r*J,k+=r*Y,C+=r*K,T+=r*$,E+=r*W,P+=r*G,x+=r*V,f+=(r=e[9])*D,g+=r*N,v+=r*j,b+=r*B,y+=r*z,m+=r*H,w+=r*q,_+=r*F,S+=r*X,k+=r*J,C+=r*Y,T+=r*K,E+=r*$,P+=r*W,x+=r*G,A+=r*V,g+=(r=e[10])*D,v+=r*N,b+=r*j,y+=r*B,m+=r*z,w+=r*H,_+=r*q,S+=r*F,k+=r*X,C+=r*J,T+=r*Y,E+=r*K,P+=r*$,x+=r*W,A+=r*G,O+=r*V,v+=(r=e[11])*D,b+=r*N,y+=r*j,m+=r*B,w+=r*z,_+=r*H,S+=r*q,k+=r*F,C+=r*X,T+=r*J,E+=r*Y,P+=r*K,x+=r*$,A+=r*W,O+=r*G,L+=r*V,b+=(r=e[12])*D,y+=r*N,m+=r*j,w+=r*B,_+=r*z,S+=r*H,k+=r*q,C+=r*F,T+=r*X,E+=r*J,P+=r*Y,x+=r*K,A+=r*$,O+=r*W,L+=r*G,R+=r*V,y+=(r=e[13])*D,m+=r*N,w+=r*j,_+=r*B,S+=r*z,k+=r*H,C+=r*q,T+=r*F,E+=r*X,P+=r*J,x+=r*Y,A+=r*K,O+=r*$,L+=r*W,R+=r*G,U+=r*V,m+=(r=e[14])*D,w+=r*N,_+=r*j,S+=r*B,k+=r*z,C+=r*H,T+=r*q,E+=r*F,P+=r*X,x+=r*J,A+=r*Y,O+=r*K,L+=r*$,R+=r*W,U+=r*G,M+=r*V,w+=(r=e[15])*D,o+=38*(S+=r*j),a+=38*(k+=r*B),c+=38*(C+=r*z),h+=38*(T+=r*H),u+=38*(E+=r*q),l+=38*(P+=r*F),d+=38*(x+=r*X),p+=38*(A+=r*J),f+=38*(O+=r*Y),g+=38*(L+=r*K),v+=38*(R+=r*$),b+=38*(U+=r*W),y+=38*(M+=r*G),m+=38*(I+=r*V),s=(r=(s+=38*(_+=r*N))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s=(r=(s+=i-1+37*(i-1))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s+=i-1+37*(i-1),t[0]=s,t[1]=o,t[2]=a,t[3]=c,t[4]=h,t[5]=u,t[6]=l,t[7]=d,t[8]=p,t[9]=f,t[10]=g,t[11]=v,t[12]=b,t[13]=y,t[14]=m,t[15]=w}function z(t,e){B(t,e,e)}function H(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=253;r>=0;r--)z(i,i),2!==r&&4!==r&&B(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function q(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=250;r>=0;r--)z(i,i),1!==r&&B(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function F(t,n,r){var i,s,o=new Uint8Array(32),a=new Float64Array(80),h=e(),u=e(),l=e(),d=e(),p=e(),f=e();for(s=0;s<31;s++)o[s]=n[s];for(o[31]=127&n[31]|64,o[0]&=248,D(a,r),s=0;s<16;s++)u[s]=a[s],d[s]=h[s]=l[s]=0;for(h[0]=d[0]=1,s=254;s>=0;--s)R(h,u,i=o[s>>>3]>>>(7&s)&1),R(l,d,i),N(p,h,l),j(h,h,l),N(l,u,d),j(u,u,d),z(d,p),z(f,h),B(h,l,h),B(l,u,p),N(p,h,l),j(h,h,l),z(u,h),j(l,d,f),B(h,l,c),N(h,h,d),B(l,l,h),B(h,d,f),B(d,u,a),z(u,p),R(h,u,i),R(l,d,i);for(s=0;s<16;s++)a[s+16]=h[s],a[s+32]=l[s],a[s+48]=u[s],a[s+64]=d[s];var g=a.subarray(32),v=a.subarray(16);return H(g,g),B(v,v,g),U(t,v),0}function X(t,e){return F(t,e,s)}function J(t,e){return r(e,32),X(t,e)}function Y(t,e,n){var r=new Uint8Array(32);return F(r,n,e),m(t,i,r,w)}T.prototype.blocks=function(t,e,n){for(var r,i,s,o,a,c,h,u,l,d,p,f,g,v,b,y,m,w,_,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],E=this.h[3],P=this.h[4],x=this.h[5],A=this.h[6],O=this.h[7],L=this.h[8],R=this.h[9],U=this.r[0],M=this.r[1],I=this.r[2],D=this.r[3],N=this.r[4],j=this.r[5],B=this.r[6],z=this.r[7],H=this.r[8],q=this.r[9];n>=16;)d=l=0,d+=(k+=8191&(r=255&t[e+0]|(255&t[e+1])<<8))*U,d+=(C+=8191&(r>>>13|(i=255&t[e+2]|(255&t[e+3])<<8)<<3))*(5*q),d+=(T+=8191&(i>>>10|(s=255&t[e+4]|(255&t[e+5])<<8)<<6))*(5*H),d+=(E+=8191&(s>>>7|(o=255&t[e+6]|(255&t[e+7])<<8)<<9))*(5*z),l=(d+=(P+=8191&(o>>>4|(a=255&t[e+8]|(255&t[e+9])<<8)<<12))*(5*B))>>>13,d&=8191,d+=(x+=a>>>1&8191)*(5*j),d+=(A+=8191&(a>>>14|(c=255&t[e+10]|(255&t[e+11])<<8)<<2))*(5*N),d+=(O+=8191&(c>>>11|(h=255&t[e+12]|(255&t[e+13])<<8)<<5))*(5*D),d+=(L+=8191&(h>>>8|(u=255&t[e+14]|(255&t[e+15])<<8)<<8))*(5*I),p=l+=(d+=(R+=u>>>5|S)*(5*M))>>>13,p+=k*M,p+=C*U,p+=T*(5*q),p+=E*(5*H),l=(p+=P*(5*z))>>>13,p&=8191,p+=x*(5*B),p+=A*(5*j),p+=O*(5*N),p+=L*(5*D),l+=(p+=R*(5*I))>>>13,p&=8191,f=l,f+=k*I,f+=C*M,f+=T*U,f+=E*(5*q),l=(f+=P*(5*H))>>>13,f&=8191,f+=x*(5*z),f+=A*(5*B),f+=O*(5*j),f+=L*(5*N),g=l+=(f+=R*(5*D))>>>13,g+=k*D,g+=C*I,g+=T*M,g+=E*U,l=(g+=P*(5*q))>>>13,g&=8191,g+=x*(5*H),g+=A*(5*z),g+=O*(5*B),g+=L*(5*j),v=l+=(g+=R*(5*N))>>>13,v+=k*N,v+=C*D,v+=T*I,v+=E*M,l=(v+=P*U)>>>13,v&=8191,v+=x*(5*q),v+=A*(5*H),v+=O*(5*z),v+=L*(5*B),b=l+=(v+=R*(5*j))>>>13,b+=k*j,b+=C*N,b+=T*D,b+=E*I,l=(b+=P*M)>>>13,b&=8191,b+=x*U,b+=A*(5*q),b+=O*(5*H),b+=L*(5*z),y=l+=(b+=R*(5*B))>>>13,y+=k*B,y+=C*j,y+=T*N,y+=E*D,l=(y+=P*I)>>>13,y&=8191,y+=x*M,y+=A*U,y+=O*(5*q),y+=L*(5*H),m=l+=(y+=R*(5*z))>>>13,m+=k*z,m+=C*B,m+=T*j,m+=E*N,l=(m+=P*D)>>>13,m&=8191,m+=x*I,m+=A*M,m+=O*U,m+=L*(5*q),w=l+=(m+=R*(5*H))>>>13,w+=k*H,w+=C*z,w+=T*B,w+=E*j,l=(w+=P*N)>>>13,w&=8191,w+=x*D,w+=A*I,w+=O*M,w+=L*U,_=l+=(w+=R*(5*q))>>>13,_+=k*q,_+=C*H,_+=T*z,_+=E*B,l=(_+=P*j)>>>13,_&=8191,_+=x*N,_+=A*D,_+=O*I,_+=L*M,k=d=8191&(l=(l=((l+=(_+=R*U)>>>13)<<2)+l|0)+(d&=8191)|0),C=p+=l>>>=13,T=f&=8191,E=g&=8191,P=v&=8191,x=b&=8191,A=y&=8191,O=m&=8191,L=w&=8191,R=_&=8191,e+=16,n-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=E,this.h[4]=P,this.h[5]=x,this.h[6]=A,this.h[7]=O,this.h[8]=L,this.h[9]=R},T.prototype.finish=function(t,e){var n,r,i,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=n,n=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,o[0]=this.h[0]+5,n=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+n,n=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,r=(1^n)-1,s=0;s<10;s++)o[s]&=r;for(r=~r,s=0;s<10;s++)this.h[s]=this.h[s]&r|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,s=1;s<8;s++)i=(this.h[s]+this.pad[s]|0)+(i>>>16)|0,this.h[s]=65535&i;t[e+0]=this.h[0]>>>0&255,t[e+1]=this.h[0]>>>8&255,t[e+2]=this.h[1]>>>0&255,t[e+3]=this.h[1]>>>8&255,t[e+4]=this.h[2]>>>0&255,t[e+5]=this.h[2]>>>8&255,t[e+6]=this.h[3]>>>0&255,t[e+7]=this.h[3]>>>8&255,t[e+8]=this.h[4]>>>0&255,t[e+9]=this.h[4]>>>8&255,t[e+10]=this.h[5]>>>0&255,t[e+11]=this.h[5]>>>8&255,t[e+12]=this.h[6]>>>0&255,t[e+13]=this.h[6]>>>8&255,t[e+14]=this.h[7]>>>0&255,t[e+15]=this.h[7]>>>8&255},T.prototype.update=function(t,e,n){var r,i;if(this.leftover){for((i=16-this.leftover)>n&&(i=n),r=0;r=16&&(i=n-n%16,this.blocks(t,e,i),e+=i,n-=i),n){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+$,O[S]=n[k+0]<<24|n[k+1]<<16|n[k+2]<<8|n[k+3],L[S]=n[k+4]<<24|n[k+5]<<16|n[k+6]<<8|n[k+7];for(S=0;S<80;S++)if(i=R,s=U,o=M,a=I,c=D,h=N,u=j,B,d=z,p=H,f=q,g=F,v=X,b=J,y=Y,K,E=65535&(T=K),P=T>>>16,x=65535&(C=B),A=C>>>16,E+=65535&(T=(X>>>14|D<<18)^(X>>>18|D<<14)^(D>>>9|X<<23)),P+=T>>>16,x+=65535&(C=(D>>>14|X<<18)^(D>>>18|X<<14)^(X>>>9|D<<23)),A+=C>>>16,E+=65535&(T=X&J^~X&Y),P+=T>>>16,x+=65535&(C=D&N^~D&j),A+=C>>>16,E+=65535&(T=W[2*S+1]),P+=T>>>16,x+=65535&(C=W[2*S]),A+=C>>>16,C=O[S%16],P+=(T=L[S%16])>>>16,x+=65535&C,A+=C>>>16,x+=(P+=(E+=65535&T)>>>16)>>>16,E=65535&(T=_=65535&E|P<<16),P=T>>>16,x=65535&(C=w=65535&x|(A+=x>>>16)<<16),A=C>>>16,E+=65535&(T=(z>>>28|R<<4)^(R>>>2|z<<30)^(R>>>7|z<<25)),P+=T>>>16,x+=65535&(C=(R>>>28|z<<4)^(z>>>2|R<<30)^(z>>>7|R<<25)),A+=C>>>16,P+=(T=z&H^z&q^H&q)>>>16,x+=65535&(C=R&U^R&M^U&M),A+=C>>>16,l=65535&(x+=(P+=(E+=65535&T)>>>16)>>>16)|(A+=x>>>16)<<16,m=65535&E|P<<16,E=65535&(T=g),P=T>>>16,x=65535&(C=a),A=C>>>16,P+=(T=_)>>>16,x+=65535&(C=w),A+=C>>>16,U=i,M=s,I=o,D=a=65535&(x+=(P+=(E+=65535&T)>>>16)>>>16)|(A+=x>>>16)<<16,N=c,j=h,B=u,R=l,H=d,q=p,F=f,X=g=65535&E|P<<16,J=v,Y=b,K=y,z=m,S%16==15)for(k=0;k<16;k++)C=O[k],E=65535&(T=L[k]),P=T>>>16,x=65535&C,A=C>>>16,C=O[(k+9)%16],E+=65535&(T=L[(k+9)%16]),P+=T>>>16,x+=65535&C,A+=C>>>16,w=O[(k+1)%16],E+=65535&(T=((_=L[(k+1)%16])>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25)),P+=T>>>16,x+=65535&(C=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7),A+=C>>>16,w=O[(k+14)%16],P+=(T=((_=L[(k+14)%16])>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26))>>>16,x+=65535&(C=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6),A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,O[k]=65535&x|A<<16,L[k]=65535&E|P<<16;E=65535&(T=z),P=T>>>16,x=65535&(C=R),A=C>>>16,C=t[0],P+=(T=e[0])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[0]=R=65535&x|A<<16,e[0]=z=65535&E|P<<16,E=65535&(T=H),P=T>>>16,x=65535&(C=U),A=C>>>16,C=t[1],P+=(T=e[1])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[1]=U=65535&x|A<<16,e[1]=H=65535&E|P<<16,E=65535&(T=q),P=T>>>16,x=65535&(C=M),A=C>>>16,C=t[2],P+=(T=e[2])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[2]=M=65535&x|A<<16,e[2]=q=65535&E|P<<16,E=65535&(T=F),P=T>>>16,x=65535&(C=I),A=C>>>16,C=t[3],P+=(T=e[3])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[3]=I=65535&x|A<<16,e[3]=F=65535&E|P<<16,E=65535&(T=X),P=T>>>16,x=65535&(C=D),A=C>>>16,C=t[4],P+=(T=e[4])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[4]=D=65535&x|A<<16,e[4]=X=65535&E|P<<16,E=65535&(T=J),P=T>>>16,x=65535&(C=N),A=C>>>16,C=t[5],P+=(T=e[5])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[5]=N=65535&x|A<<16,e[5]=J=65535&E|P<<16,E=65535&(T=Y),P=T>>>16,x=65535&(C=j),A=C>>>16,C=t[6],P+=(T=e[6])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[6]=j=65535&x|A<<16,e[6]=Y=65535&E|P<<16,E=65535&(T=K),P=T>>>16,x=65535&(C=B),A=C>>>16,C=t[7],P+=(T=e[7])>>>16,x+=65535&C,A+=C>>>16,A+=(x+=(P+=(E+=65535&T)>>>16)>>>16)>>>16,t[7]=B=65535&x|A<<16,e[7]=K=65535&E|P<<16,$+=128,r-=128}return r}function V(t,e,n){var r,i=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),a=n;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,G(i,s,e,n),n%=128,r=0;r=0;--i)Q(t,e,r=n[i/8|0]>>(7&i)&1),Z(e,t),Z(t,t),Q(t,e,r)}function nt(t,n){var r=[e(),e(),e(),e()];O(r[0],l),O(r[1],d),O(r[2],a),B(r[3],l,d),et(t,r,n)}function rt(t,n,i){var s,o=new Uint8Array(64),a=[e(),e(),e(),e()];for(i||r(n,32),V(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,nt(a,o),tt(t,a),s=0;s<32;s++)n[s+32]=t[s];return 0}var it=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function st(t,e){var n,r,i,s;for(r=63;r>=32;--r){for(n=0,i=r-32,s=r-12;i>4)*it[i],n=e[i]>>8,e[i]&=255;for(i=0;i<32;i++)e[i]-=n*it[i];for(r=0;r<32;r++)e[r+1]+=e[r]>>8,t[r]=255&e[r]}function ot(t){var e,n=new Float64Array(64);for(e=0;e<64;e++)n[e]=t[e];for(e=0;e<64;e++)t[e]=0;st(t,n)}function at(t,n,r,i){var s,o,a=new Uint8Array(64),c=new Uint8Array(64),h=new Uint8Array(64),u=new Float64Array(64),l=[e(),e(),e(),e()];V(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64;var d=r+64;for(s=0;s>7&&j(t[0],o,t[0]),B(t[3],t[0],t[1]),0)}(d,i))return-1;for(s=0;s=0},t.sign.keyPair=function(){var t=new Uint8Array(32),e=new Uint8Array(64);return rt(t,e),{publicKey:t,secretKey:e}},t.sign.keyPair.fromSecretKey=function(t){if(ut(t),64!==t.length)throw new Error("bad secret key size");for(var e=new Uint8Array(32),n=0;n0)r.loading[t].push(n);else{r.loading[t]=[n];var i=ue.createScriptRequest(r.getPath(t,e)),s=r.receivers.create((function(e){if(r.receivers.remove(s),r.loading[t]){var n=r.loading[t];delete r.loading[t];for(var o=function(t){t||i.cleanup()},a=0;a>>6)+_(128|63&e):_(224|e>>>12&15)+_(128|e>>>6&63)+_(128|63&e)},P=function(t){return t.replace(/[^\x00-\x7F]/g,E)},x=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[S.charAt(n>>>18),S.charAt(n>>>12&63),e>=2?"=":S.charAt(n>>>6&63),e>=1?"=":S.charAt(63&n)].join("")},A=window.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,x)};var O=class{constructor(t,e,n,r){this.clear=e,this.timer=t(()=>{this.timer&&(this.timer=r(this.timer))},n)}isRunning(){return null!==this.timer}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}};function L(t){window.clearTimeout(t)}function R(t){window.clearInterval(t)}class U extends O{constructor(t,e){super(setTimeout,L,t,(function(t){return e(),null}))}}class M extends O{constructor(t,e){super(setInterval,R,t,(function(t){return e(),t}))}}var I={now:()=>Date.now?Date.now():(new Date).valueOf(),defer:t=>new U(0,t),method(t,...e){var n=Array.prototype.slice.call(arguments,1);return function(e){return e[t].apply(e,n.concat(arguments))}}};function D(t,...e){for(var n=0;n{window.console&&window.console.log&&window.console.log(t)}}debug(...t){this.log(this.globalLog,t)}warn(...t){this.log(this.globalLogWarn,t)}error(...t){this.log(this.globalLogError,t)}globalLogWarn(t){window.console&&window.console.warn?window.console.warn(t):this.globalLog(t)}globalLogError(t){window.console&&window.console.error?window.console.error(t):this.globalLogWarn(t)}log(t,...e){var n=N.apply(this,arguments);if(Le.log)Le.log(n);else if(Le.logToConsole){t.bind(this)(n)}}},G=function(t,e,n,r,i){void 0===n.headers&&null==n.headersProvider||W.warn(`To send headers with the ${r.toString()} request, you must use AJAX, rather than JSONP.`);var s=t.nextAuthCallbackID.toString();t.nextAuthCallbackID++;var o=t.getDocument(),a=o.createElement("script");t.auth_callbacks[s]=function(t){i(null,t)};var c="Pusher.auth_callbacks['"+s+"']";a.src=n.endpoint+"?callback="+encodeURIComponent(c)+"&"+e;var h=o.getElementsByTagName("head")[0]||o.documentElement;h.insertBefore(a,h.firstChild)};class V{constructor(t){this.src=t}send(t){var e=this,n="Error loading "+e.src;e.script=document.createElement("script"),e.script.id=t.id,e.script.src=e.src,e.script.type="text/javascript",e.script.charset="UTF-8",e.script.addEventListener?(e.script.onerror=function(){t.callback(n)},e.script.onload=function(){t.callback(null)}):e.script.onreadystatechange=function(){"loaded"!==e.script.readyState&&"complete"!==e.script.readyState||t.callback(null)},void 0===e.script.async&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(e.errorScript=document.createElement("script"),e.errorScript.id=t.id+"_error",e.errorScript.text=t.name+"('"+n+"');",e.script.async=e.errorScript.async=!1):e.script.async=!0;var r=document.getElementsByTagName("head")[0];r.insertBefore(e.script,r.firstChild),e.errorScript&&r.insertBefore(e.errorScript,e.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class Z{constructor(t,e){this.url=t,this.data=e}send(t){if(!this.request){var e=K(this.data),n=this.url+"/"+t.number+"?"+e;this.request=ue.createScriptRequest(n),this.request.send(t)}}cleanup(){this.request&&this.request.cleanup()}}var Q={name:"jsonp",getAgent:function(t,e){return function(n,r){var s="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path,o=ue.createJSONPRequest(s,n),a=ue.ScriptReceivers.create((function(e,n){i.remove(a),o.cleanup(),n&&n.host&&(t.host=n.host),r&&r(e,n)}));o.send(a)}}};function tt(t,e,n){return t+(e.useTLS?"s":"")+"://"+(e.useTLS?e.hostTLS:e.hostNonTLS)+n}function et(t,e){return"/app/"+t+("?protocol="+s.PROTOCOL+"&client=js&version="+s.VERSION+(e?"&"+e:""))}var nt={getInitial:function(t,e){return tt("ws",e,(e.httpPath||"")+et(t,"flash=false"))}},rt={getInitial:function(t,e){return tt("http",e,(e.httpPath||"/pusher")+et(t))}},it={getInitial:function(t,e){return tt("http",e,e.httpPath||"/pusher")},getPath:function(t,e){return et(t)}};class st{constructor(){this._callbacks={}}get(t){return this._callbacks[ot(t)]}add(t,e,n){var r=ot(t);this._callbacks[r]=this._callbacks[r]||[],this._callbacks[r].push({fn:e,context:n})}remove(t,e,n){if(t||e||n){var r=t?[ot(t)]:z(this._callbacks);e||n?this.removeCallback(r,e,n):this.removeAllCallbacks(r)}else this._callbacks={}}removeCallback(t,e,n){H(t,(function(t){this._callbacks[t]=F(this._callbacks[t]||[],(function(t){return e&&e!==t.fn||n&&n!==t.context})),0===this._callbacks[t].length&&delete this._callbacks[t]}),this)}removeAllCallbacks(t){H(t,(function(t){delete this._callbacks[t]}),this)}}function ot(t){return"_"+t}class at{constructor(t){this.callbacks=new st,this.global_callbacks=[],this.failThrough=t}bind(t,e,n){return this.callbacks.add(t,e,n),this}bind_global(t){return this.global_callbacks.push(t),this}unbind(t,e,n){return this.callbacks.remove(t,e,n),this}unbind_global(t){return t?(this.global_callbacks=F(this.global_callbacks||[],e=>e!==t),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(t,e,n){for(var r=0;r0)for(r=0;r{this.onError(t),this.changeState("closed")}),!1}return this.bindListeners(),W.debug("Connecting",{transport:this.name,url:t}),this.changeState("connecting"),!0}close(){return!!this.socket&&(this.socket.close(),!0)}send(t){return"open"===this.state&&(I.defer(()=>{this.socket&&this.socket.send(t)}),!0)}ping(){"open"===this.state&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(t){this.emit("error",{type:"WebSocketError",error:t}),this.timeline.error(this.buildTimelineMessage({error:t.toString()}))}onClose(t){t?this.changeState("closed",{code:t.code,reason:t.reason,wasClean:t.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(t){this.emit("message",t)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=t=>{this.onError(t)},this.socket.onclose=t=>{this.onClose(t)},this.socket.onmessage=t=>{this.onMessage(t)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(t,e){this.state=t,this.timeline.info(this.buildTimelineMessage({state:t,params:e})),this.emit(t,e)}buildTimelineMessage(t){return D({cid:this.id},t)}}class ht{constructor(t){this.hooks=t}isSupported(t){return this.hooks.isSupported(t)}createConnection(t,e,n,r){return new ct(this.hooks,t,e,n,r)}}var ut=new ht({urls:nt,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return Boolean(ue.getWebSocketAPI())},isSupported:function(){return Boolean(ue.getWebSocketAPI())},getSocket:function(t){return ue.createWebSocket(t)}}),lt={urls:rt,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},dt=D({getSocket:function(t){return ue.HTTPFactory.createStreamingSocket(t)}},lt),pt=D({getSocket:function(t){return ue.HTTPFactory.createPollingSocket(t)}},lt),ft={isSupported:function(){return ue.isXHRSupported()}},gt={ws:ut,xhr_streaming:new ht(D({},dt,ft)),xhr_polling:new ht(D({},pt,ft))},vt=new ht({file:"sockjs",urls:it,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return void 0!==window.SockJS},getSocket:function(t,e){return new window.SockJS(t,null,{js_path:a.getPath("sockjs",{useTLS:e.useTLS}),ignore_null_origin:e.ignoreNullOrigin})},beforeOpen:function(t,e){t.send(JSON.stringify({path:e}))}}),bt={isSupported:function(t){return ue.isXDRSupported(t.useTLS)}},yt=new ht(D({},dt,bt)),mt=new ht(D({},pt,bt));gt.xdr_streaming=yt,gt.xdr_polling=mt,gt.sockjs=vt;var wt=gt;var _t=new class extends at{constructor(){super();var t=this;void 0!==window.addEventListener&&(window.addEventListener("online",(function(){t.emit("online")}),!1),window.addEventListener("offline",(function(){t.emit("offline")}),!1))}isOnline(){return void 0===window.navigator.onLine||window.navigator.onLine}};class St{constructor(t,e,n){this.manager=t,this.transport=e,this.minPingDelay=n.minPingDelay,this.maxPingDelay=n.maxPingDelay,this.pingDelay=void 0}createConnection(t,e,n,r){r=D({},r,{activityTimeout:this.pingDelay});var i=this.transport.createConnection(t,e,n,r),s=null,o=function(){i.unbind("open",o),i.bind("closed",a),s=I.now()},a=t=>{if(i.unbind("closed",a),1002===t.code||1003===t.code)this.manager.reportDeath();else if(!t.wasClean&&s){var e=I.now()-s;e<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(e/2,this.minPingDelay))}};return i.bind("open",o),i}isSupported(t){return this.manager.isAlive()&&this.transport.isSupported(t)}}const kt={decodeMessage:function(t){try{var e=JSON.parse(t.data),n=e.data;if("string"==typeof n)try{n=JSON.parse(e.data)}catch(t){}var r={event:e.event,channel:e.channel,data:n};return e.user_id&&(r.user_id=e.user_id),r}catch(e){throw{type:"MessageParseError",error:e,data:t.data}}},encodeMessage:function(t){return JSON.stringify(t)},processHandshake:function(t){var e=kt.decodeMessage(t);if("pusher:connection_established"===e.event){if(!e.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:e.data.socket_id,activityTimeout:1e3*e.data.activity_timeout}}if("pusher:error"===e.event)return{action:this.getCloseAction(e.data),error:this.getCloseError(e.data)};throw"Invalid handshake"},getCloseAction:function(t){return t.code<4e3?t.code>=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}};var Ct=kt;class Tt extends at{constructor(t,e){super(),this.id=t,this.transport=e,this.activityTimeout=e.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(t){return this.transport.send(t)}send_event(t,e,n){var r={event:t,data:e};return n&&(r.channel=n),W.debug("Event sent",r),this.send(Ct.encodeMessage(r))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var t={message:t=>{var e;try{e=Ct.decodeMessage(t)}catch(e){this.emit("error",{type:"MessageParseError",error:e,data:t.data})}if(void 0!==e){switch(W.debug("Event recd",e),e.event){case"pusher:error":this.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong")}this.emit("message",e)}},activity:()=>{this.emit("activity")},error:t=>{this.emit("error",t)},closed:t=>{e(),t&&t.code&&this.handleCloseEvent(t),this.transport=null,this.emit("closed")}},e=()=>{B(t,(t,e)=>{this.transport.unbind(e,t)})};B(t,(t,e)=>{this.transport.bind(e,t)})}handleCloseEvent(t){var e=Ct.getCloseAction(t),n=Ct.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})}}class Et{constructor(t,e){this.transport=t,this.callback=e,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=t=>{var e;this.unbindListeners();try{e=Ct.processHandshake(t)}catch(t){return this.finish("error",{error:t}),void this.transport.close()}"connected"===e.action?this.finish("connected",{connection:new Tt(e.id,this.transport),activityTimeout:e.activityTimeout}):(this.finish(e.action,{error:e.error}),this.transport.close())},this.onClosed=t=>{this.unbindListeners();var e=Ct.getCloseAction(t)||"backoff",n=Ct.getCloseError(t);this.finish(e,{error:n})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(t,e){this.callback(D({transport:this.transport,action:t},e))}}class Pt{constructor(t,e){this.timeline=t,this.options=e||{}}send(t,e){this.timeline.isEmpty()||this.timeline.send(ue.TimelineTransport.getAgent(this,t),e)}}class xt extends at{constructor(t,e){super((function(e,n){W.debug("No callbacks on "+t+" for "+e)})),this.name=t,this.pusher=e,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(t,e){return e(null,{auth:""})}trigger(t,e){if(0!==t.indexOf("client-"))throw new l("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=u("triggeringClientEvents");W.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)}handleSubscriptionCountEvent(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(t,e)=>{t?(this.subscriptionPending=!1,W.error(t.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:t.message},t instanceof m?{status:t.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class At extends xt{authorize(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)}}class Ot{constructor(){this.reset()}get(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null}each(t){B(this.members,(e,n)=>{t(this.get(n))})}setMyID(t){this.myID=t}onSubscription(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)}addMember(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)}removeMember(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var Lt=function(t,e,n,r){return new(n||(n=Promise))((function(i,s){function o(t){try{c(r.next(t))}catch(t){s(t)}}function a(t){try{c(r.throw(t))}catch(t){s(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}c((r=r.apply(t,e||[])).next())}))};class Rt extends At{constructor(t,e){super(t,e),this.members=new Ot}authorize(t,e){super.authorize(t,(t,n)=>Lt(this,void 0,void 0,(function*(){if(!t)if(null!=(n=n).channel_data){var r=JSON.parse(n.channel_data);this.members.setMyID(r.user_id)}else{if(yield this.pusher.user.signinDonePromise,null==this.pusher.user.user_data){let t=u("authorizationEndpoint");return W.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${t}, or the user should be signed in.`),void e("Invalid auth response")}this.members.setMyID(this.pusher.user.user_data.id)}e(t,n)})))}handleEvent(t){var e=t.event;if(0===e.indexOf("pusher_internal:"))this.handleInternalEvent(t);else{var n=t.data,r={};t.user_id&&(r.user_id=t.user_id),this.emit(e,n,r)}}handleInternalEvent(t){var e=t.event,n=t.data;switch(e){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(t);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(t);break;case"pusher_internal:member_added":var r=this.members.addMember(n);this.emit("pusher:member_added",r);break;case"pusher_internal:member_removed":var i=this.members.removeMember(n);i&&this.emit("pusher:member_removed",i)}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(t.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var Ut=n(1),Mt=n(0);class It extends At{constructor(t,e,n){super(t,e),this.key=null,this.nacl=n}authorize(t,e){super.authorize(t,(t,n)=>{if(t)return void e(t,n);let r=n.shared_secret;r?(this.key=Object(Mt.decode)(r),delete n.shared_secret,e(null,n)):e(new Error("No shared_secret key in auth payload for encrypted channel: "+this.name),null)})}trigger(t,e){throw new v("Client events are not currently supported for encrypted channels")}handleEvent(t){var e=t.event,n=t.data;0!==e.indexOf("pusher_internal:")&&0!==e.indexOf("pusher:")?this.handleEncryptedEvent(e,n):super.handleEvent(t)}handleEncryptedEvent(t,e){if(!this.key)return void W.debug("Received encrypted event before key has been retrieved from the authEndpoint");if(!e.ciphertext||!e.nonce)return void W.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+e);let n=Object(Mt.decode)(e.ciphertext);if(n.length{e?W.error(`Failed to make a request to the authEndpoint: ${s}. Unable to fetch new key, so dropping encrypted event`):(i=this.nacl.secretbox.open(n,r,this.key),null!==i?this.emit(t,this.getDataToEmit(i)):W.error("Failed to decrypt event with new key. Dropping encrypted event"))});this.emit(t,this.getDataToEmit(i))}getDataToEmit(t){let e=Object(Ut.decode)(t);try{return JSON.parse(e)}catch(t){return e}}}class Dt extends at{constructor(t,e){super(),this.state="initialized",this.connection=null,this.key=t,this.options=e,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var n=ue.getNetwork();n.bind("online",()=>{this.timeline.info({netinfo:"online"}),"connecting"!==this.state&&"unavailable"!==this.state||this.retryIn(0)}),n.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){this.connection||this.runner||(this.strategy.isSupported()?(this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()):this.updateState("failed"))}send(t){return!!this.connection&&this.connection.send(t)}send_event(t,e,n){return!!this.connection&&this.connection.send_event(t,e,n)}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var t=(e,n)=>{e?this.runner=this.strategy.connect(0,t):"error"===n.action?(this.emit("error",{type:"HandshakeError",error:n.error}),this.timeline.error({handshakeError:n.error})):(this.abortConnecting(),this.handshakeCallbacks[n.action](n))};this.runner=this.strategy.connect(0,t)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection)&&this.abandonConnection().close()}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(t){this.timeline.info({action:"retry",delay:t}),t>0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new U(t||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new U(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new U(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new U(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(t){return D({},t,{message:t=>{this.resetActivityCheck(),this.emit("message",t)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:t=>{this.emit("error",t)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(t){return D({},t,{connected:t=>{this.activityTimeout=Math.min(this.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(t.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let t=t=>e=>{e.error&&this.emit("error",{type:"WebSocketError",error:e.error}),t(e)};return{tls_only:t(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:t(()=>{this.disconnect()}),backoff:t(()=>{this.retryIn(1e3)}),retry:t(()=>{this.retryIn(0)})}}setConnection(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()}abandonConnection(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}}updateState(t,e){var n=this.state;if(this.state=t,n!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+e.socket_id),W.debug("State changed",n+" -> "+r),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}}shouldRetry(){return"connecting"===this.state||"connected"===this.state}}class Nt{constructor(){this.channels={}}add(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return jt.createEncryptedChannel(t,e,e.config.nacl);let n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",r=u("encryptedChannelSupport");throw new v(`${n}. ${r}`)}if(0===t.indexOf("private-"))return jt.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return jt.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new d('Cannot create a channel with name "'+t+'".');return jt.createChannel(t,e)}(t,e)),this.channels[t]}all(){return function(t){var e=[];return B(t,(function(t){e.push(t)})),e}(this.channels)}find(t){return this.channels[t]}remove(t){var e=this.channels[t];return delete this.channels[t],e}disconnect(){B(this.channels,(function(t){t.disconnect()}))}}var jt={createChannels:()=>new Nt,createConnectionManager:(t,e)=>new Dt(t,e),createChannel:(t,e)=>new xt(t,e),createPrivateChannel:(t,e)=>new At(t,e),createPresenceChannel:(t,e)=>new Rt(t,e),createEncryptedChannel:(t,e,n)=>new It(t,e,n),createTimelineSender:(t,e)=>new Pt(t,e),createHandshake:(t,e)=>new Et(t,e),createAssistantToTheTransportManager:(t,e,n)=>new St(t,e,n)};class Bt{constructor(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}getAssistant(t){return jt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class zt{constructor(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}isSupported(){return J(this.strategies,I.method("isSupported"))}connect(t,e){var n=this.strategies,r=0,i=this.timeout,s=null,o=(a,c)=>{c?e(null,c):(r+=1,this.loop&&(r%=n.length),r0&&(i=new U(n.timeout,(function(){s.abort(),r(!0)}))),s=t.connect(e,(function(t,e){t&&i&&i.isRunning()&&!n.failFast||(i&&i.ensureAborted(),r(t,e))})),{abort:function(){i&&i.ensureAborted(),s.abort()},forceMinPriority:function(t){s.forceMinPriority(t)}}}}class Ht{constructor(t){this.strategies=t}isSupported(){return J(this.strategies,I.method("isSupported"))}connect(t,e){return function(t,e,n){var r=q(t,(function(t,r,i,s){return t.connect(e,n(r,s))}));return{abort:function(){H(r,qt)},forceMinPriority:function(t){H(r,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(r,i){n[t].error=r,r?function(t){return function(t,e){for(var n=0;n=I.now()){var s=this.transports[r.transport];s&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),i.push(new zt([s],{timeout:2*r.latency+1e3,failFast:!0})))}var o=I.now(),a=i.pop().connect(t,(function r(s,c){s?(Jt(n),i.length>0?(o=I.now(),a=i.pop().connect(t,r)):e(s)):(!function(t,e,n){var r=ue.getLocalStorage();if(r)try{r[Xt(t)]=$({timestamp:I.now(),transport:e,latency:n})}catch(t){}}(n,c.transport.name,I.now()-o),e(null,c))}));return{abort:function(){a.abort()},forceMinPriority:function(e){t=e,a&&a.forceMinPriority(e)}}}}function Xt(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function Jt(t){var e=ue.getLocalStorage();if(e)try{delete e[Xt(t)]}catch(t){}}class Yt{constructor(t,{delay:e}){this.strategy=t,this.options={delay:e}}isSupported(){return this.strategy.isSupported()}connect(t,e){var n,r=this.strategy,i=new U(this.options.delay,(function(){n=r.connect(t,e)}));return{abort:function(){i.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}}}class Kt{constructor(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}isSupported(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()}connect(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)}}class $t{constructor(t){this.strategy=t}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.strategy.connect(t,(function(t,r){r&&n.abort(),e(t,r)}));return n}}function Wt(t){return function(){return t.isSupported()}}var Gt=function(t,e,n){var r={};function i(e,i,s,o,a){var c=n(t,e,i,s,o,a);return r[e]=c,c}var s,o=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=Object.assign({},o,{useTLS:!0}),c=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),h={loop:!0,timeout:15e3,timeoutLimit:6e4},u=new Bt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=new Bt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),d=i("ws","ws",3,o,u),p=i("wss","ws",3,a,u),f=i("sockjs","sockjs",1,c),g=i("xhr_streaming","xhr_streaming",1,c,l),v=i("xdr_streaming","xdr_streaming",1,c,l),b=i("xhr_polling","xhr_polling",1,c),y=i("xdr_polling","xdr_polling",1,c),m=new zt([d],h),w=new zt([p],h),_=new zt([f],h),S=new zt([new Kt(Wt(g),g,v)],h),k=new zt([new Kt(Wt(b),b,y)],h),C=new zt([new Kt(Wt(S),new Ht([S,new Yt(k,{delay:4e3})]),k)],h),T=new Kt(Wt(C),C,_);return s=e.useTLS?new Ht([m,new Yt(T,{delay:2e3})]):new Ht([m,new Yt(w,{delay:2e3}),new Yt(T,{delay:5e3})]),new Ft(new $t(new Kt(Wt(d),s,T)),r,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})},Vt={getRequest:function(t){var e=new window.XDomainRequest;return e.ontimeout=function(){t.emit("error",new p),t.close()},e.onerror=function(e){t.emit("error",e),t.close()},e.onprogress=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText)},e.onload=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText),t.emit("finished",200),t.close()},e},abortRequest:function(t){t.ontimeout=t.onerror=t.onprogress=t.onload=null,t.abort()}};class Zt extends at{constructor(t,e,n){super(),this.hooks=t,this.method=e,this.url=n}start(t){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},ue.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)}close(){this.unloader&&(ue.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")}advanceBuffer(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null}isBufferTooLong(t){return this.position===t.length&&t.length>262144}}var Qt;!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(Qt||(Qt={}));var te=Qt,ee=1;function ne(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+ee++}function re(t){return ue.randomInt(t)}var ie,se=class{constructor(t,e){this.hooks=t,this.session=re(1e3)+"/"+function(t){for(var e=[],n=0;n{this.onChunk(t)}),this.stream.bind("finished",t=>{this.hooks.onFinished(this,t)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(t){I.defer(()=>{this.onError(t),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}},oe={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr_streaming"+t.queryString},onHeartbeat:function(t){t.sendRaw("[]")},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){t.onClose(1006,"Connection interrupted ("+e+")",!1)}},ae={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr"+t.queryString},onHeartbeat:function(){},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){200===e?t.reconnect():t.onClose(1006,"Connection interrupted ("+e+")",!1)}},ce={getRequest:function(t){var e=new(ue.getXHRAPI());return e.onreadystatechange=e.onprogress=function(){switch(e.readyState){case 3:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},he={createStreamingSocket(t){return this.createSocket(oe,t)},createPollingSocket(t){return this.createSocket(ae,t)},createSocket:(t,e)=>new se(t,e),createXHR(t,e){return this.createRequest(ce,t,e)},createRequest:(t,e,n)=>new Zt(t,e,n),createXDR:function(t,e){return this.createRequest(Vt,t,e)}},ue={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:i,DependenciesReceivers:o,getDefaultStrategy:Gt,Transports:wt,transportConnectionInitializer:function(){var t=this;t.timeline.info(t.buildTimelineMessage({transport:t.name+(t.options.useTLS?"s":"")})),t.hooks.isInitialized()?t.changeState("initialized"):t.hooks.file?(t.changeState("initializing"),a.load(t.hooks.file,{useTLS:t.options.useTLS},(function(e,n){t.hooks.isInitialized()?(t.changeState("initialized"),n(!0)):(e&&t.onError(e),t.onClose(),n(!1))}))):t.onClose()},HTTPFactory:he,TimelineTransport:Q,getXHRAPI:()=>window.XMLHttpRequest,getWebSocketAPI:()=>window.WebSocket||window.MozWebSocket,setup(t){window.Pusher=t;var e=()=>{this.onDocumentBody(t.ready)};window.JSON?e():a.load("json2",{},e)},getDocument:()=>document,getProtocol(){return this.getDocument().location.protocol},getAuthorizers:()=>({ajax:w,jsonp:G}),onDocumentBody(t){document.body?t():setTimeout(()=>{this.onDocumentBody(t)},0)},createJSONPRequest:(t,e)=>new Z(t,e),createScriptRequest:t=>new V(t),getLocalStorage(){try{return window.localStorage}catch(t){return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){return new(this.getXHRAPI())},createMicrosoftXHR:()=>new ActiveXObject("Microsoft.XMLHTTP"),getNetwork:()=>_t,createWebSocket(t){return new(this.getWebSocketAPI())(t)},createSocketRequest(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);if(this.isXDRSupported(0===e.indexOf("https:")))return this.HTTPFactory.createXDR(t,e);throw"Cross-origin HTTP requests are not supported"},isXHRSupported(){var t=this.getXHRAPI();return Boolean(t)&&void 0!==(new t).withCredentials},isXDRSupported(t){var e=t?"https:":"http:",n=this.getProtocol();return Boolean(window.XDomainRequest)&&n===e},addUnloadListener(t){void 0!==window.addEventListener?window.addEventListener("unload",t,!1):void 0!==window.attachEvent&&window.attachEvent("onunload",t)},removeUnloadListener(t){void 0!==window.addEventListener?window.removeEventListener("unload",t,!1):void 0!==window.detachEvent&&window.detachEvent("onunload",t)},randomInt:t=>Math.floor((window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(ie||(ie={}));var le=ie;class de{constructor(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}log(t,e){t<=this.options.level&&(this.events.push(D({},e,{timestamp:I.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(t){this.log(le.ERROR,t)}info(t){this.log(le.INFO,t)}debug(t){this.log(le.DEBUG,t)}isEmpty(){return 0===this.events.length}send(t,e){var n=D({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(n,(t,n)=>{t||this.sent++,e&&e(t,n)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class pe{constructor(t,e,n,r){this.name=t,this.priority=e,this.transport=n,this.options=r||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(t,e){if(!this.isSupported())return fe(new y,e);if(this.priority{n||(h(),i?i.close():r.close())},forceMinPriority:t=>{n||this.priority{if(void 0===ue.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);ue.getAuthorizers()[t.transport](ue,r,t,h.UserAuthentication,n)}};var we=t=>{if(void 0===ue.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in n+="&channel_name="+encodeURIComponent(t.channelName),e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);ue.getAuthorizers()[t.transport](ue,r,t,h.ChannelAuthorization,n)}};function _e(t){return t.httpHost?t.httpHost:t.cluster?`sockjs-${t.cluster}.pusher.com`:s.httpHost}function Se(t){return t.wsHost?t.wsHost:`ws-${t.cluster}.pusher.com`}function ke(t){return"https:"===ue.getProtocol()||!1!==t.forceTLS}function Ce(t){return"enableStats"in t?t.enableStats:"disableStats"in t&&!t.disableStats}function Te(t){const e=Object.assign(Object.assign({},s.userAuthentication),t.userAuthentication);return"customHandler"in e&&null!=e.customHandler?e.customHandler:me(e)}function Ee(t,e){const n=function(t,e){let n;return"channelAuthorization"in t?n=Object.assign(Object.assign({},s.channelAuthorization),t.channelAuthorization):(n={transport:t.authTransport||s.authTransport,endpoint:t.authEndpoint||s.authEndpoint},"auth"in t&&("params"in t.auth&&(n.params=t.auth.params),"headers"in t.auth&&(n.headers=t.auth.headers)),"authorizer"in t&&(n.customHandler=((t,e,n)=>{const r={authTransport:e.transport,authEndpoint:e.endpoint,auth:{params:e.params,headers:e.headers}};return(e,i)=>{const s=t.channel(e.channelName);n(s,r).authorize(e.socketId,i)}})(e,n,t.authorizer))),n}(t,e);return"customHandler"in n&&null!=n.customHandler?n.customHandler:we(n)}class Pe extends at{constructor(t){super((function(t,e){W.debug("No callbacks on watchlist events for "+t)})),this.pusher=t,this.bindWatchlistInternalEvent()}handleEvent(t){t.data.events.forEach(t=>{this.emit(t.name,t)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",t=>{"pusher_internal:watchlist_events"===t.event&&this.handleEvent(t)})}}var xe=function(){let t,e;return{promise:new Promise((n,r)=>{t=n,e=r}),resolve:t,reject:e}};class Ae extends at{constructor(t){super((function(t,e){W.debug("No callbacks on user for "+t)})),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(t,e)=>{if(t)return W.warn("Error during signin: "+t),void this._cleanup();this.pusher.send_event("pusher:signin",{auth:e.auth,user_data:e.user_data})},this.pusher=t,this.pusher.connection.bind("state_change",({previous:t,current:e})=>{"connected"!==t&&"connected"===e&&this._signin(),"connected"===t&&"connected"!==e&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new Pe(t),this.pusher.connection.bind("message",t=>{"pusher:signin_success"===t.event&&this._onSigninSuccess(t.data),this.serverToUserChannel&&this.serverToUserChannel.name===t.channel&&this.serverToUserChannel.handleEvent(t)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),"connected"===this.pusher.connection.state&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(t){try{this.user_data=JSON.parse(t.user_data)}catch(e){return W.error("Failed parsing user data after signin: "+t.user_data),void this._cleanup()}if("string"!=typeof this.user_data.id||""===this.user_data.id)return W.error("user_data doesn't contain an id. user_data: "+this.user_data),void this._cleanup();this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){this.serverToUserChannel=new xt("#server-to-user-"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global((t,e)=>{0!==t.indexOf("pusher_internal:")&&0!==t.indexOf("pusher:")&&this.emit(t,e)}),(t=>{t.subscriptionPending&&t.subscriptionCancelled?t.reinstateSubscription():t.subscriptionPending||"connected"!==this.pusher.connection.state||t.subscribe()})(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested)return;if(this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:t,resolve:e,reject:n}=xe();t.done=!1;const r=()=>{t.done=!0};t.then(r).catch(r),this.signinDonePromise=t,this._signinDoneResolve=e}}class Oe{static ready(){Oe.isReady=!0;for(var t=0,e=Oe.instances.length;tue.getDefaultStrategy(this.config,t,ve),timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:Boolean(this.config.useTLS)}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",t=>{var e=0===t.event.indexOf("pusher_internal:");if(t.channel){var n=this.channel(t.channel);n&&n.handleEvent(t)}e||this.global_emitter.emit(t.event,t.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",t=>{W.warn(t)}),Oe.instances.push(this),this.timeline.info({instances:Oe.instances.length}),this.user=new Ae(this),Oe.isReady&&this.connect()}channel(t){return this.channels.find(t)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),e=this.timelineSender;this.timelineSenderTimer=new M(6e4,(function(){e.send(t)}))}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(t,e,n){return this.global_emitter.bind(t,e,n),this}unbind(t,e,n){return this.global_emitter.unbind(t,e,n),this}bind_global(t){return this.global_emitter.bind_global(t),this}unbind_global(t){return this.global_emitter.unbind_global(t),this}unbind_all(t){return this.global_emitter.unbind_all(),this}subscribeAll(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)}subscribe(t){var e=this.channels.add(t,this);return e.subscriptionPending&&e.subscriptionCancelled?e.reinstateSubscription():e.subscriptionPending||"connected"!==this.connection.state||e.subscribe(),e}unsubscribe(t){var e=this.channels.find(t);e&&e.subscriptionPending?e.cancelSubscription():(e=this.channels.remove(t))&&e.subscribed&&e.unsubscribe()}send_event(t,e,n){return this.connection.send_event(t,e,n)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Oe.instances=[],Oe.isReady=!1,Oe.logToConsole=!1,Oe.Runtime=ue,Oe.ScriptReceivers=ue.ScriptReceivers,Oe.DependenciesReceivers=ue.DependenciesReceivers,Oe.auth_callbacks=ue.auth_callbacks;var Le=Oe;ue.setup(Oe);var Re=n(2);class Ue extends Le{constructor(t,e){Le.logToConsole=Ue.logToConsole,Le.log=Ue.log,ye(e),e.nacl=Re,super(t,e)}}}])})); //# sourceMappingURL=pusher-with-encryption.min.js.map \ No newline at end of file diff --git a/dist/web/pusher-with-encryption.min.js.map b/dist/web/pusher-with-encryption.min.js.map index d4753ce21..0c64e09e3 100644 --- a/dist/web/pusher-with-encryption.min.js.map +++ b/dist/web/pusher-with-encryption.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","this","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","nacl","gf","init","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","vn","xi","y","yi","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","inp","k","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","Math","floor","sel25519","q","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","e","f","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","bytes","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","mask","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","crypto_hash","add","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","checkLengths","checkArrayTypes","arguments","TypeError","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","publicKey","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","fn","crypto","self","msCrypto","getRandomValues","default","AuthRequestType","prefix","lastId","callback","number","id","called","callbackWrapper","apply","remove","receiver","ScriptReceivers","ScriptReceiverFactory","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","options","receivers","loading","load","request","createScriptRequest","getPath","error","callbacks","successCallback","wasSuccessful","send","getRoot","protocol","getDocument","location","useTLS","replace","version","suffix","DependenciesReceivers","Dependencies","urlStore","baseUrl","urls","authenticationEndpoint","path","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","url","urlObj","urlPrefix","setPrototypeOf","status","context","query","authOptions","authRequestType","xhr","createXHR","headerName","setRequestHeader","headers","headersProvider","dynamicHeaders","onreadystatechange","readyState","parsed","JSON","parse","responseText","HTTPAuthError","toString","UserAuthentication","ChannelAuthorization","b64chars","b64tab","charAt","cb_utob","cc","utob","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","timer","isRunning","ensureAborted","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","OneOffTimer","method","boundArguments","Array","slice","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","keys","_","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","buildQueryString","params","undefined","source","objects","paths","derez","nu","$ref","globalLog","message","console","log","debug","args","warn","globalLogWarn","globalLogError","defaultLoggingFunction","logToConsole","callbackName","nextAuthCallbackID","document","script","createElement","auth_callbacks","callback_name","src","head","getElementsByTagName","documentElement","insertBefore","firstChild","errorString","type","charset","addEventListener","onerror","onload","async","attachEvent","navigator","userAgent","errorScript","text","nextSibling","parentNode","removeChild","getAgent","sender","host","createJSONPRequest","getGenericURL","baseScheme","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","sockjs","_callbacks","prefixedEventName","names","removeCallback","removeAllCallbacks","binding","failThrough","global_callbacks","eventName","bind_global","unbind","unbind_global","unbind_all","emit","metadata","hooks","priority","initialize","transportConnectionInitializer","state","timeline","generateUniqueID","handlesActivityChecks","supportsPing","connect","socket","getSocket","onError","changeState","bindListeners","close","ping","onOpen","beforeOpen","onopen","buildTimelineMessage","onClose","closeEvent","code","reason","wasClean","unbindListeners","onMessage","onActivity","onclose","onmessage","onactivity","info","cid","isSupported","environment","createConnection","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","SockJSTransport","file","SockJS","js_path","ignore_null_origin","ignoreNullOrigin","xdrConfiguration","isXDRSupported","XDRStreamingTransport","XDRPollingTransport","xdr_streaming","xdr_polling","isOnline","onLine","manager","minPingDelay","maxPingDelay","pingDelay","connection","openTimestamp","onClosed","reportDeath","lifespan","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","isEmpty","TimelineTransport","pusher","subscribed","subscriptionPending","subscriptionCancelled","authorize","socketId","auth","trigger","disconnect","handleEvent","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","subscribe","assign","channel_data","cancelSubscription","reinstateSubscription","config","channelAuthorizer","channelName","reset","members","each","member","setMyID","myID","onSubscription","subscriptionData","presence","count","me","addMember","memberData","user_info","removeMember","authData","channelData","user","signinDonePromise","user_data","handleInternalEvent","addedMember","removedMember","sharedSecret","handleEncryptedEvent","ciphertext","cipherText","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","isUsingTLS","handshake","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","all","values","find","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","getAssistant","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","trueBranch","falseBranch","testSupportsStrategy","State","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","sockjs_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","sockjs_transport","xhr_streaming_transport","xdr_streaming_transport","xhr_polling_transport","xdr_polling_transport","ws_loop","wss_loop","sockjs_loop","streaming_loop","polling_loop","http_loop","http_fallback_loop","getRequest","xdr","XDomainRequest","ontimeout","onprogress","onChunk","abortRequest","start","payload","position","unloader","addUnloadListener","removeUnloadListener","chunk","advanceBuffer","isBufferTooLong","unreadData","endOfLinePosition","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","parts","exec","getLocation","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","reconnect","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","getXHRAPI","createSocket","createRequest","getDefaultStrategy","Transports","XMLHttpRequest","WebSocket","MozWebSocket","setup","PusherClass","Pusher","initializeOnDocumentBody","onDocumentBody","ready","getProtocol","getAuthorizers","ajax","jsonp","body","localStorage","createXMLHttpRequest","createMicrosoftXHR","ActiveXObject","createXDR","Constructor","withCredentials","documentProtocol","removeEventListener","detachEvent","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","cluster","features","failAttempt","onInitialized","serializedTransport","transportClass","enabledTransports","disabledTransports","deferred","validateOptions","paramsProvider","dynamicParams","composeChannelQuery","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","err","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","signin","userAuthenticator","_subscribeChannels","done","setDone","then","app_key","checkAppKey","statsHost","timelineParams","global_emitter","sessionID","getClientFeatures","timelineSender","subscribeAll","internal","instances","isReady","allChannels","timelineSenderTimer","PeriodicTimer","event_name","channel_name","Runtime","PusherWithEncryption"],"mappings":"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","file":"pusher-with-encryption.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","this","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","nacl","gf","init","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","vn","xi","y","yi","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","inp","k","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","Math","floor","sel25519","q","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","e","f","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","bytes","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","mask","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","crypto_hash","add","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","checkLengths","checkArrayTypes","arguments","TypeError","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","publicKey","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","fn","crypto","self","msCrypto","getRandomValues","default","ScriptReceiverFactory","prefix","lastId","callback","number","id","called","callbackWrapper","apply","receiver","ScriptReceivers","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","DependenciesReceivers","Dependencies","options","receivers","loading","request","createScriptRequest","getPath","error","remove","callbacks","successCallback","wasSuccessful","send","protocol","getDocument","location","useTLS","replace","version","getRoot","suffix","urlStore","baseUrl","urls","authenticationEndpoint","path","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","AuthRequestType","urlObj","url","BadEventName","super","setPrototypeOf","BadChannelName","RequestTimedOut","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","status","context","query","authOptions","authRequestType","xhr","createXHR","headerName","setRequestHeader","headers","headersProvider","dynamicHeaders","onreadystatechange","readyState","parsed","JSON","parse","responseText","toString","UserAuthentication","ChannelAuthorization","b64chars","b64tab","charAt","cb_utob","cc","utob","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","timer","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","args","boundArguments","Array","slice","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","keys","_","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","buildQueryString","params","undefined","method","source","objects","paths","derez","nu","$ref","globalLog","message","console","log","globalLogWarn","globalLogError","warn","defaultLoggingFunction","logToConsole","callbackName","nextAuthCallbackID","document","script","createElement","auth_callbacks","callback_name","src","head","getElementsByTagName","documentElement","insertBefore","firstChild","ScriptRequest","errorString","type","charset","addEventListener","onerror","onload","async","attachEvent","navigator","userAgent","errorScript","text","nextSibling","parentNode","removeChild","getAgent","sender","host","createJSONPRequest","getGenericURL","baseScheme","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","sockjs","_callbacks","prefixedEventName","names","removeCallback","removeAllCallbacks","binding","failThrough","global_callbacks","eventName","unbind","unbind_global","metadata","hooks","priority","initialize","transportConnectionInitializer","state","timeline","generateUniqueID","handlesActivityChecks","supportsPing","socket","getSocket","onError","changeState","bindListeners","debug","close","ping","beforeOpen","onopen","emit","buildTimelineMessage","closeEvent","code","reason","wasClean","unbindListeners","onOpen","onclose","onClose","onmessage","onMessage","onactivity","onActivity","info","cid","environment","isSupported","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","SockJSTransport","file","SockJS","js_path","ignore_null_origin","ignoreNullOrigin","xdrConfiguration","isXDRSupported","XDRStreamingTransport","XDRPollingTransport","xdr_streaming","xdr_polling","onLine","manager","minPingDelay","maxPingDelay","pingDelay","connection","createConnection","openTimestamp","onClosed","reportDeath","lifespan","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","isEmpty","TimelineTransport","pusher","subscribed","subscriptionPending","subscriptionCancelled","socketId","auth","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","authorize","assign","channel_data","config","channelAuthorizer","channelName","reset","members","member","myID","subscriptionData","presence","count","me","memberData","user_info","authData","channelData","setMyID","user","signinDonePromise","user_data","handleInternalEvent","addedMember","addMember","removedMember","removeMember","onSubscription","disconnect","sharedSecret","handleEncryptedEvent","handleEvent","ciphertext","cipherText","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","handshake","connect","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","ensureAborted","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","values","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","isRunning","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","sockjs_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","sockjs_transport","xhr_streaming_transport","xdr_streaming_transport","xhr_polling_transport","xdr_polling_transport","ws_loop","wss_loop","sockjs_loop","streaming_loop","polling_loop","http_loop","http_fallback_loop","getRequest","xdr","XDomainRequest","ontimeout","onprogress","onChunk","abortRequest","payload","position","unloader","addUnloadListener","removeUnloadListener","chunk","advanceBuffer","isBufferTooLong","unreadData","endOfLinePosition","State","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","parts","exec","getLocation","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","start","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","reconnect","unbind_all","getXHRAPI","createSocket","createRequest","getDefaultStrategy","Transports","load","XMLHttpRequest","WebSocket","MozWebSocket","PusherClass","Pusher","initializeOnDocumentBody","onDocumentBody","ready","getAuthorizers","ajax","jsonp","body","localStorage","createXMLHttpRequest","createMicrosoftXHR","ActiveXObject","createXDR","Constructor","withCredentials","documentProtocol","getProtocol","removeEventListener","detachEvent","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","cluster","features","failAttempt","onInitialized","serializedTransport","transportClass","enabledTransports","disabledTransports","getAssistant","deferred","validateOptions","paramsProvider","dynamicParams","composeChannelQuery","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","err","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","userAuthenticator","_subscribeChannels","bind_global","reinstateSubscription","subscribe","ensure_subscribed","done","setDone","then","catch","isReady","instances","app_key","checkAppKey","statsHost","timelineParams","getConfig","global_emitter","sessionID","getClientFeatures","timelineSender","subscribeAll","isUsingTLS","internal","find","all","timelineSenderTimer","event_name","channel_name","cancelSubscription","signin","Runtime","setup"],"mappings":"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","file":"pusher-with-encryption.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/web/pusher.js b/dist/web/pusher.js index bb745db6d..427bdffdb 100644 --- a/dist/web/pusher.js +++ b/dist/web/pusher.js @@ -1,5 +1,5 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher @@ -562,13 +562,13 @@ module.exports = __webpack_require__(3).default; __webpack_require__.r(__webpack_exports__); // CONCATENATED MODULE: ./src/runtimes/web/dom/script_receiver_factory.ts -var ScriptReceiverFactory = (function () { - function ScriptReceiverFactory(prefix, name) { +class ScriptReceiverFactory { + constructor(prefix, name) { this.lastId = 0; this.prefix = prefix; this.name = name; } - ScriptReceiverFactory.prototype.create = function (callback) { + create(callback) { this.lastId++; var number = this.lastId; var id = this.prefix + number; @@ -582,18 +582,16 @@ var ScriptReceiverFactory = (function () { }; this[number] = callbackWrapper; return { number: number, id: id, name: name, callback: callbackWrapper }; - }; - ScriptReceiverFactory.prototype.remove = function (receiver) { + } + remove(receiver) { delete this[receiver.number]; - }; - return ScriptReceiverFactory; -}()); - + } +} var ScriptReceivers = new ScriptReceiverFactory('_pusher_script_', 'Pusher.ScriptReceivers'); // CONCATENATED MODULE: ./src/core/defaults.ts var Defaults = { - VERSION: "8.0.2", + VERSION: "8.1.0", PROTOCOL: 7, wsPort: 80, wssPort: 443, @@ -625,13 +623,13 @@ var Defaults = { // CONCATENATED MODULE: ./src/runtimes/web/dom/dependency_loader.ts -var dependency_loader_DependencyLoader = (function () { - function DependencyLoader(options) { +class dependency_loader_DependencyLoader { + constructor(options) { this.options = options; this.receivers = options.receivers || ScriptReceivers; this.loading = {}; } - DependencyLoader.prototype.load = function (name, options, callback) { + load(name, options, callback) { var self = this; if (self.loading[name] && self.loading[name].length > 0) { self.loading[name].push(callback); @@ -656,8 +654,8 @@ var dependency_loader_DependencyLoader = (function () { }); request.send(receiver); } - }; - DependencyLoader.prototype.getRoot = function (options) { + } + getRoot(options) { var cdn; var protocol = runtime.getDocument().location.protocol; if ((options && options.useTLS) || protocol === 'https:') { @@ -667,20 +665,18 @@ var dependency_loader_DependencyLoader = (function () { cdn = this.options.cdn_http; } return cdn.replace(/\/*$/, '') + '/' + this.options.version; - }; - DependencyLoader.prototype.getPath = function (name, options) { + } + getPath(name, options) { return this.getRoot(options) + '/' + name + this.options.suffix + '.js'; - }; - return DependencyLoader; -}()); -/* harmony default export */ var dependency_loader = (dependency_loader_DependencyLoader); + } +} // CONCATENATED MODULE: ./src/runtimes/web/dom/dependencies.ts var DependenciesReceivers = new ScriptReceiverFactory('_pusher_dependencies', 'Pusher.DependenciesReceivers'); -var Dependencies = new dependency_loader({ +var Dependencies = new dependency_loader_DependencyLoader({ cdn_http: defaults.cdn_http, cdn_https: defaults.cdn_https, version: defaults.VERSION, @@ -689,7 +685,7 @@ var Dependencies = new dependency_loader({ }); // CONCATENATED MODULE: ./src/core/utils/url_store.ts -var urlStore = { +const urlStore = { baseUrl: 'https://pusher.com', urls: { authenticationEndpoint: { @@ -709,12 +705,12 @@ var urlStore = { } } }; -var buildLogSuffix = function (key) { - var urlPrefix = 'See:'; - var urlObj = urlStore.urls[key]; +const buildLogSuffix = function (key) { + const urlPrefix = 'See:'; + const urlObj = urlStore.urls[key]; if (!urlObj) return ''; - var url; + let url; if (urlObj.fullUrl) { url = urlObj.fullUrl; } @@ -723,9 +719,9 @@ var buildLogSuffix = function (key) { } if (!url) return ''; - return urlPrefix + " " + url; + return `${urlPrefix} ${url}`; }; -/* harmony default export */ var url_store = ({ buildLogSuffix: buildLogSuffix }); +/* harmony default export */ var url_store = ({ buildLogSuffix }); // CONCATENATED MODULE: ./src/core/auth/options.ts var AuthRequestType; @@ -735,134 +731,76 @@ var AuthRequestType; })(AuthRequestType || (AuthRequestType = {})); // CONCATENATED MODULE: ./src/core/errors.ts -var __extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var BadEventName = (function (_super) { - __extends(BadEventName, _super); - function BadEventName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadEventName; -}(Error)); - -var BadChannelName = (function (_super) { - __extends(BadChannelName, _super); - function BadChannelName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadChannelName; -}(Error)); - -var RequestTimedOut = (function (_super) { - __extends(RequestTimedOut, _super); - function RequestTimedOut(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return RequestTimedOut; -}(Error)); - -var TransportPriorityTooLow = (function (_super) { - __extends(TransportPriorityTooLow, _super); - function TransportPriorityTooLow(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportPriorityTooLow; -}(Error)); - -var TransportClosed = (function (_super) { - __extends(TransportClosed, _super); - function TransportClosed(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportClosed; -}(Error)); - -var UnsupportedFeature = (function (_super) { - __extends(UnsupportedFeature, _super); - function UnsupportedFeature(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedFeature; -}(Error)); - -var UnsupportedTransport = (function (_super) { - __extends(UnsupportedTransport, _super); - function UnsupportedTransport(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedTransport; -}(Error)); - -var UnsupportedStrategy = (function (_super) { - __extends(UnsupportedStrategy, _super); - function UnsupportedStrategy(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedStrategy; -}(Error)); - -var HTTPAuthError = (function (_super) { - __extends(HTTPAuthError, _super); - function HTTPAuthError(status, msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - _this.status = status; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return HTTPAuthError; -}(Error)); - +class BadEventName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class BadChannelName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class RequestTimedOut extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportPriorityTooLow extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportClosed extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedFeature extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedTransport extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedStrategy extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class HTTPAuthError extends Error { + constructor(status, msg) { + super(msg); + this.status = status; + Object.setPrototypeOf(this, new.target.prototype); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/auth/xhr_auth.ts -var ajax = function (context, query, authOptions, authRequestType, callback) { - var xhr = runtime.createXHR(); +const ajax = function (context, query, authOptions, authRequestType, callback) { + const xhr = runtime.createXHR(); xhr.open('POST', authOptions.endpoint, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); for (var headerName in authOptions.headers) { xhr.setRequestHeader(headerName, authOptions.headers[headerName]); } if (authOptions.headersProvider != null) { - var dynamicHeaders = authOptions.headersProvider(); + let dynamicHeaders = authOptions.headersProvider(); for (var headerName in dynamicHeaders) { xhr.setRequestHeader(headerName, dynamicHeaders[headerName]); } @@ -870,31 +808,31 @@ var ajax = function (context, query, authOptions, authRequestType, callback) { xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { - var data = void 0; - var parsed = false; + let data; + let parsed = false; try { data = JSON.parse(xhr.responseText); parsed = true; } catch (e) { - callback(new HTTPAuthError(200, "JSON returned from " + authRequestType.toString() + " endpoint was invalid, yet status code was 200. Data was: " + xhr.responseText), null); + callback(new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${xhr.responseText}`), null); } if (parsed) { callback(null, data); } } else { - var suffix = ''; + let suffix = ''; switch (authRequestType) { case AuthRequestType.UserAuthentication: suffix = url_store.buildLogSuffix('authenticationEndpoint'); break; case AuthRequestType.ChannelAuthorization: - suffix = "Clients must be authorized to join private or presence channels. " + url_store.buildLogSuffix('authorizationEndpoint'); + suffix = `Clients must be authorized to join private or presence channels. ${url_store.buildLogSuffix('authorizationEndpoint')}`; break; } - callback(new HTTPAuthError(xhr.status, "Unable to retrieve auth string from " + authRequestType.toString() + " endpoint - " + - ("received status: " + xhr.status + " from " + authOptions.endpoint + ". " + suffix)), null); + callback(new HTTPAuthError(xhr.status, `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` + + `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`), null); } } }; @@ -945,43 +883,28 @@ var btoa = window.btoa || }; // CONCATENATED MODULE: ./src/core/utils/timers/abstract_timer.ts -var Timer = (function () { - function Timer(set, clear, delay, callback) { - var _this = this; +class Timer { + constructor(set, clear, delay, callback) { this.clear = clear; - this.timer = set(function () { - if (_this.timer) { - _this.timer = callback(_this.timer); + this.timer = set(() => { + if (this.timer) { + this.timer = callback(this.timer); } }, delay); } - Timer.prototype.isRunning = function () { + isRunning() { return this.timer !== null; - }; - Timer.prototype.ensureAborted = function () { + } + ensureAborted() { if (this.timer) { this.clear(this.timer); this.timer = null; } - }; - return Timer; -}()); + } +} /* harmony default export */ var abstract_timer = (Timer); // CONCATENATED MODULE: ./src/core/utils/timers/index.ts -var timers_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); function timers_clearTimeout(timer) { window.clearTimeout(timer); @@ -989,33 +912,27 @@ function timers_clearTimeout(timer) { function timers_clearInterval(timer) { window.clearInterval(timer); } -var OneOffTimer = (function (_super) { - timers_extends(OneOffTimer, _super); - function OneOffTimer(delay, callback) { - return _super.call(this, setTimeout, timers_clearTimeout, delay, function (timer) { +class timers_OneOffTimer extends abstract_timer { + constructor(delay, callback) { + super(setTimeout, timers_clearTimeout, delay, function (timer) { callback(); return null; - }) || this; + }); } - return OneOffTimer; -}(abstract_timer)); - -var PeriodicTimer = (function (_super) { - timers_extends(PeriodicTimer, _super); - function PeriodicTimer(delay, callback) { - return _super.call(this, setInterval, timers_clearInterval, delay, function (timer) { +} +class timers_PeriodicTimer extends abstract_timer { + constructor(delay, callback) { + super(setInterval, timers_clearInterval, delay, function (timer) { callback(); return timer; - }) || this; + }); } - return PeriodicTimer; -}(abstract_timer)); - +} // CONCATENATED MODULE: ./src/core/util.ts var Util = { - now: function () { + now() { if (Date.now) { return Date.now(); } @@ -1023,14 +940,10 @@ var Util = { return new Date().valueOf(); } }, - defer: function (callback) { - return new OneOffTimer(0, callback); + defer(callback) { + return new timers_OneOffTimer(0, callback); }, - method: function (name) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + method(name, ...args) { var boundArguments = Array.prototype.slice.call(arguments, 1); return function (object) { return object[name].apply(object, boundArguments.concat(arguments)); @@ -1042,11 +955,7 @@ var Util = { // CONCATENATED MODULE: ./src/core/utils/collections.ts -function extend(target) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } +function extend(target, ...sources) { for (var i = 0; i < sources.length; i++) { var extensions = sources[i]; for (var property in extensions) { @@ -1240,67 +1149,50 @@ function safeJSONStringify(source) { // CONCATENATED MODULE: ./src/core/logger.ts -var logger_Logger = (function () { - function Logger() { - this.globalLog = function (message) { +class logger_Logger { + constructor() { + this.globalLog = (message) => { if (window.console && window.console.log) { window.console.log(message); } }; } - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + debug(...args) { this.log(this.globalLog, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + warn(...args) { this.log(this.globalLogWarn, args); - }; - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + error(...args) { this.log(this.globalLogError, args); - }; - Logger.prototype.globalLogWarn = function (message) { + } + globalLogWarn(message) { if (window.console && window.console.warn) { window.console.warn(message); } else { this.globalLog(message); } - }; - Logger.prototype.globalLogError = function (message) { + } + globalLogError(message) { if (window.console && window.console.error) { window.console.error(message); } else { this.globalLogWarn(message); } - }; - Logger.prototype.log = function (defaultLoggingFunction) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + } + log(defaultLoggingFunction, ...args) { var message = stringify.apply(this, arguments); if (core_pusher.log) { core_pusher.log(message); } else if (core_pusher.logToConsole) { - var log = defaultLoggingFunction.bind(this); + const log = defaultLoggingFunction.bind(this); log(message); } - }; - return Logger; -}()); + } +} /* harmony default export */ var logger = (new logger_Logger()); // CONCATENATED MODULE: ./src/runtimes/web/auth/jsonp_auth.ts @@ -1308,7 +1200,7 @@ var logger_Logger = (function () { var jsonp = function (context, query, authOptions, authRequestType, callback) { if (authOptions.headers !== undefined || authOptions.headersProvider != null) { - logger.warn("To send headers with the " + authRequestType.toString() + " request, you must use AJAX, rather than JSONP."); + logger.warn(`To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`); } var callbackName = context.nextAuthCallbackID.toString(); context.nextAuthCallbackID++; @@ -1330,11 +1222,11 @@ var jsonp = function (context, query, authOptions, authRequestType, callback) { /* harmony default export */ var jsonp_auth = (jsonp); // CONCATENATED MODULE: ./src/runtimes/web/dom/script_request.ts -var ScriptRequest = (function () { - function ScriptRequest(src) { +class ScriptRequest { + constructor(src) { this.src = src; } - ScriptRequest.prototype.send = function (receiver) { + send(receiver) { var self = this; var errorString = 'Error loading ' + self.src; self.script = document.createElement('script'); @@ -1374,8 +1266,8 @@ var ScriptRequest = (function () { if (self.errorScript) { head.insertBefore(self.errorScript, self.script.nextSibling); } - }; - ScriptRequest.prototype.cleanup = function () { + } + cleanup() { if (this.script) { this.script.onload = this.script.onerror = null; this.script.onreadystatechange = null; @@ -1388,20 +1280,18 @@ var ScriptRequest = (function () { } this.script = null; this.errorScript = null; - }; - return ScriptRequest; -}()); -/* harmony default export */ var script_request = (ScriptRequest); + } +} // CONCATENATED MODULE: ./src/runtimes/web/dom/jsonp_request.ts -var jsonp_request_JSONPRequest = (function () { - function JSONPRequest(url, data) { +class jsonp_request_JSONPRequest { + constructor(url, data) { this.url = url; this.data = data; } - JSONPRequest.prototype.send = function (receiver) { + send(receiver) { if (this.request) { return; } @@ -1409,15 +1299,13 @@ var jsonp_request_JSONPRequest = (function () { var url = this.url + '/' + receiver.number + '?' + query; this.request = runtime.createScriptRequest(url); this.request.send(receiver); - }; - JSONPRequest.prototype.cleanup = function () { + } + cleanup() { if (this.request) { this.request.cleanup(); } - }; - return JSONPRequest; -}()); -/* harmony default export */ var jsonp_request = (jsonp_request_JSONPRequest); + } +} // CONCATENATED MODULE: ./src/runtimes/web/timeline/jsonp_timeline.ts @@ -1442,7 +1330,7 @@ var getAgent = function (sender, useTLS) { }; var jsonp_timeline_jsonp = { name: 'jsonp', - getAgent: getAgent + getAgent }; /* harmony default export */ var jsonp_timeline = (jsonp_timeline_jsonp); @@ -1486,14 +1374,14 @@ var sockjs = { // CONCATENATED MODULE: ./src/core/events/callback_registry.ts -var callback_registry_CallbackRegistry = (function () { - function CallbackRegistry() { +class callback_registry_CallbackRegistry { + constructor() { this._callbacks = {}; } - CallbackRegistry.prototype.get = function (name) { + get(name) { return this._callbacks[prefix(name)]; - }; - CallbackRegistry.prototype.add = function (name, callback, context) { + } + add(name, callback, context) { var prefixedEventName = prefix(name); this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || []; @@ -1501,8 +1389,8 @@ var callback_registry_CallbackRegistry = (function () { fn: callback, context: context }); - }; - CallbackRegistry.prototype.remove = function (name, callback, context) { + } + remove(name, callback, context) { if (!name && !callback && !context) { this._callbacks = {}; return; @@ -1514,8 +1402,8 @@ var callback_registry_CallbackRegistry = (function () { else { this.removeAllCallbacks(names); } - }; - CallbackRegistry.prototype.removeCallback = function (names, callback, context) { + } + removeCallback(names, callback, context) { apply(names, function (name) { this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) { return ((callback && callback !== binding.fn) || @@ -1525,15 +1413,13 @@ var callback_registry_CallbackRegistry = (function () { delete this._callbacks[name]; } }, this); - }; - CallbackRegistry.prototype.removeAllCallbacks = function (names) { + } + removeAllCallbacks(names) { apply(names, function (name) { delete this._callbacks[name]; }, this); - }; - return CallbackRegistry; -}()); -/* harmony default export */ var callback_registry = (callback_registry_CallbackRegistry); + } +} function prefix(name) { return '_' + name; } @@ -1541,38 +1427,38 @@ function prefix(name) { // CONCATENATED MODULE: ./src/core/events/dispatcher.ts -var dispatcher_Dispatcher = (function () { - function Dispatcher(failThrough) { - this.callbacks = new callback_registry(); +class dispatcher_Dispatcher { + constructor(failThrough) { + this.callbacks = new callback_registry_CallbackRegistry(); this.global_callbacks = []; this.failThrough = failThrough; } - Dispatcher.prototype.bind = function (eventName, callback, context) { + bind(eventName, callback, context) { this.callbacks.add(eventName, callback, context); return this; - }; - Dispatcher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_callbacks.push(callback); return this; - }; - Dispatcher.prototype.unbind = function (eventName, callback, context) { + } + unbind(eventName, callback, context) { this.callbacks.remove(eventName, callback, context); return this; - }; - Dispatcher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { if (!callback) { this.global_callbacks = []; return this; } - this.global_callbacks = filter(this.global_callbacks || [], function (c) { return c !== callback; }); + this.global_callbacks = filter(this.global_callbacks || [], c => c !== callback); return this; - }; - Dispatcher.prototype.unbind_all = function () { + } + unbind_all() { this.unbind(); this.unbind_global(); return this; - }; - Dispatcher.prototype.emit = function (eventName, data, metadata) { + } + emit(eventName, data, metadata) { for (var i = 0; i < this.global_callbacks.length; i++) { this.global_callbacks[i](eventName, data); } @@ -1593,54 +1479,36 @@ var dispatcher_Dispatcher = (function () { this.failThrough(eventName, data); } return this; - }; - return Dispatcher; -}()); -/* harmony default export */ var dispatcher = (dispatcher_Dispatcher); + } +} // CONCATENATED MODULE: ./src/core/transports/transport_connection.ts -var transport_connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var transport_connection_TransportConnection = (function (_super) { - transport_connection_extends(TransportConnection, _super); - function TransportConnection(hooks, name, priority, key, options) { - var _this = _super.call(this) || this; - _this.initialize = runtime.transportConnectionInitializer; - _this.hooks = hooks; - _this.name = name; - _this.priority = priority; - _this.key = key; - _this.options = options; - _this.state = 'new'; - _this.timeline = options.timeline; - _this.activityTimeout = options.activityTimeout; - _this.id = _this.timeline.generateUniqueID(); - return _this; +class transport_connection_TransportConnection extends dispatcher_Dispatcher { + constructor(hooks, name, priority, key, options) { + super(); + this.initialize = runtime.transportConnectionInitializer; + this.hooks = hooks; + this.name = name; + this.priority = priority; + this.key = key; + this.options = options; + this.state = 'new'; + this.timeline = options.timeline; + this.activityTimeout = options.activityTimeout; + this.id = this.timeline.generateUniqueID(); } - TransportConnection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return Boolean(this.hooks.handlesActivityChecks); - }; - TransportConnection.prototype.supportsPing = function () { + } + supportsPing() { return Boolean(this.hooks.supportsPing); - }; - TransportConnection.prototype.connect = function () { - var _this = this; + } + connect() { if (this.socket || this.state !== 'initialized') { return false; } @@ -1649,18 +1517,18 @@ var transport_connection_TransportConnection = (function (_super) { this.socket = this.hooks.getSocket(url, this.options); } catch (e) { - util.defer(function () { - _this.onError(e); - _this.changeState('closed'); + util.defer(() => { + this.onError(e); + this.changeState('closed'); }); return false; } this.bindListeners(); - logger.debug('Connecting', { transport: this.name, url: url }); + logger.debug('Connecting', { transport: this.name, url }); this.changeState('connecting'); return true; - }; - TransportConnection.prototype.close = function () { + } + close() { if (this.socket) { this.socket.close(); return true; @@ -1668,13 +1536,12 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.send = function (data) { - var _this = this; + } + send(data) { if (this.state === 'open') { - util.defer(function () { - if (_this.socket) { - _this.socket.send(data); + util.defer(() => { + if (this.socket) { + this.socket.send(data); } }); return true; @@ -1682,24 +1549,24 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.ping = function () { + } + ping() { if (this.state === 'open' && this.supportsPing()) { this.socket.ping(); } - }; - TransportConnection.prototype.onOpen = function () { + } + onOpen() { if (this.hooks.beforeOpen) { this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options)); } this.changeState('open'); this.socket.onopen = undefined; - }; - TransportConnection.prototype.onError = function (error) { + } + onError(error) { this.emit('error', { type: 'WebSocketError', error: error }); this.timeline.error(this.buildTimelineMessage({ error: error.toString() })); - }; - TransportConnection.prototype.onClose = function (closeEvent) { + } + onClose(closeEvent) { if (closeEvent) { this.changeState('closed', { code: closeEvent.code, @@ -1712,34 +1579,33 @@ var transport_connection_TransportConnection = (function (_super) { } this.unbindListeners(); this.socket = undefined; - }; - TransportConnection.prototype.onMessage = function (message) { + } + onMessage(message) { this.emit('message', message); - }; - TransportConnection.prototype.onActivity = function () { + } + onActivity() { this.emit('activity'); - }; - TransportConnection.prototype.bindListeners = function () { - var _this = this; - this.socket.onopen = function () { - _this.onOpen(); + } + bindListeners() { + this.socket.onopen = () => { + this.onOpen(); }; - this.socket.onerror = function (error) { - _this.onError(error); + this.socket.onerror = error => { + this.onError(error); }; - this.socket.onclose = function (closeEvent) { - _this.onClose(closeEvent); + this.socket.onclose = closeEvent => { + this.onClose(closeEvent); }; - this.socket.onmessage = function (message) { - _this.onMessage(message); + this.socket.onmessage = message => { + this.onMessage(message); }; if (this.supportsPing()) { - this.socket.onactivity = function () { - _this.onActivity(); + this.socket.onactivity = () => { + this.onActivity(); }; } - }; - TransportConnection.prototype.unbindListeners = function () { + } + unbindListeners() { if (this.socket) { this.socket.onopen = undefined; this.socket.onerror = undefined; @@ -1749,44 +1615,40 @@ var transport_connection_TransportConnection = (function (_super) { this.socket.onactivity = undefined; } } - }; - TransportConnection.prototype.changeState = function (state, params) { + } + changeState(state, params) { this.state = state; this.timeline.info(this.buildTimelineMessage({ state: state, params: params })); this.emit(state, params); - }; - TransportConnection.prototype.buildTimelineMessage = function (message) { + } + buildTimelineMessage(message) { return extend({ cid: this.id }, message); - }; - return TransportConnection; -}(dispatcher)); -/* harmony default export */ var transport_connection = (transport_connection_TransportConnection); + } +} // CONCATENATED MODULE: ./src/core/transports/transport.ts -var transport_Transport = (function () { - function Transport(hooks) { +class transport_Transport { + constructor(hooks) { this.hooks = hooks; } - Transport.prototype.isSupported = function (environment) { + isSupported(environment) { return this.hooks.isSupported(environment); - }; - Transport.prototype.createConnection = function (name, priority, key, options) { - return new transport_connection(this.hooks, name, priority, key, options); - }; - return Transport; -}()); -/* harmony default export */ var transports_transport = (transport_Transport); + } + createConnection(name, priority, key, options) { + return new transport_connection_TransportConnection(this.hooks, name, priority, key, options); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/transports/transports.ts -var WSTransport = new transports_transport({ +var WSTransport = new transport_Transport({ urls: ws, handlesActivityChecks: false, supportsPing: false, @@ -1823,8 +1685,8 @@ var xhrConfiguration = { return runtime.isXHRSupported(); } }; -var XHRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xhrConfiguration))); -var XHRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xhrConfiguration)); +var XHRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xhrConfiguration))); +var XHRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xhrConfiguration)); var Transports = { ws: WSTransport, xhr_streaming: XHRStreamingTransport, @@ -1839,7 +1701,7 @@ var Transports = { -var SockJSTransport = new transports_transport({ +var SockJSTransport = new transport_Transport({ file: 'sockjs', urls: sockjs, handlesActivityChecks: true, @@ -1870,33 +1732,19 @@ var xdrConfiguration = { return yes; } }; -var XDRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xdrConfiguration))); -var XDRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xdrConfiguration)); +var XDRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xdrConfiguration))); +var XDRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xdrConfiguration)); transports.xdr_streaming = XDRStreamingTransport; transports.xdr_polling = XDRPollingTransport; transports.sockjs = SockJSTransport; /* harmony default export */ var transports_transports = (transports); // CONCATENATED MODULE: ./src/runtimes/web/net_info.ts -var net_info_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var NetInfo = (function (_super) { - net_info_extends(NetInfo, _super); - function NetInfo() { - var _this = _super.call(this) || this; - var self = _this; +class net_info_NetInfo extends dispatcher_Dispatcher { + constructor() { + super(); + var self = this; if (window.addEventListener !== undefined) { window.addEventListener('online', function () { self.emit('online'); @@ -1905,34 +1753,30 @@ var NetInfo = (function (_super) { self.emit('offline'); }, false); } - return _this; } - NetInfo.prototype.isOnline = function () { + isOnline() { if (window.navigator.onLine === undefined) { return true; } else { return window.navigator.onLine; } - }; - return NetInfo; -}(dispatcher)); - -var net_info_Network = new NetInfo(); + } +} +var net_info_Network = new net_info_NetInfo(); // CONCATENATED MODULE: ./src/core/transports/assistant_to_the_transport_manager.ts -var assistant_to_the_transport_manager_AssistantToTheTransportManager = (function () { - function AssistantToTheTransportManager(manager, transport, options) { +class assistant_to_the_transport_manager_AssistantToTheTransportManager { + constructor(manager, transport, options) { this.manager = manager; this.transport = transport; this.minPingDelay = options.minPingDelay; this.maxPingDelay = options.maxPingDelay; this.pingDelay = undefined; } - AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) { - var _this = this; + createConnection(name, priority, key, options) { options = extend({}, options, { activityTimeout: this.pingDelay }); @@ -1943,31 +1787,29 @@ var assistant_to_the_transport_manager_AssistantToTheTransportManager = (functio connection.bind('closed', onClosed); openTimestamp = util.now(); }; - var onClosed = function (closeEvent) { + var onClosed = closeEvent => { connection.unbind('closed', onClosed); if (closeEvent.code === 1002 || closeEvent.code === 1003) { - _this.manager.reportDeath(); + this.manager.reportDeath(); } else if (!closeEvent.wasClean && openTimestamp) { var lifespan = util.now() - openTimestamp; - if (lifespan < 2 * _this.maxPingDelay) { - _this.manager.reportDeath(); - _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay); + if (lifespan < 2 * this.maxPingDelay) { + this.manager.reportDeath(); + this.pingDelay = Math.max(lifespan / 2, this.minPingDelay); } } }; connection.bind('open', onOpen); return connection; - }; - AssistantToTheTransportManager.prototype.isSupported = function (environment) { + } + isSupported(environment) { return this.manager.isAlive() && this.transport.isSupported(environment); - }; - return AssistantToTheTransportManager; -}()); -/* harmony default export */ var assistant_to_the_transport_manager = (assistant_to_the_transport_manager_AssistantToTheTransportManager); + } +} // CONCATENATED MODULE: ./src/core/connection/protocol/protocol.ts -var Protocol = { +const Protocol = { decodeMessage: function (messageEvent) { try { var messageData = JSON.parse(messageEvent.data); @@ -2060,68 +1902,52 @@ var Protocol = { /* harmony default export */ var protocol_protocol = (Protocol); // CONCATENATED MODULE: ./src/core/connection/connection.ts -var connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_Connection = (function (_super) { - connection_extends(Connection, _super); - function Connection(id, transport) { - var _this = _super.call(this) || this; - _this.id = id; - _this.transport = transport; - _this.activityTimeout = transport.activityTimeout; - _this.bindListeners(); - return _this; +class connection_Connection extends dispatcher_Dispatcher { + constructor(id, transport) { + super(); + this.id = id; + this.transport = transport; + this.activityTimeout = transport.activityTimeout; + this.bindListeners(); } - Connection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return this.transport.handlesActivityChecks(); - }; - Connection.prototype.send = function (data) { + } + send(data) { return this.transport.send(data); - }; - Connection.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { var event = { event: name, data: data }; if (channel) { event.channel = channel; } logger.debug('Event sent', event); return this.send(protocol_protocol.encodeMessage(event)); - }; - Connection.prototype.ping = function () { + } + ping() { if (this.transport.supportsPing()) { this.transport.ping(); } else { this.send_event('pusher:ping', {}); } - }; - Connection.prototype.close = function () { + } + close() { this.transport.close(); - }; - Connection.prototype.bindListeners = function () { - var _this = this; + } + bindListeners() { var listeners = { - message: function (messageEvent) { + message: (messageEvent) => { var pusherEvent; try { pusherEvent = protocol_protocol.decodeMessage(messageEvent); } catch (e) { - _this.emit('error', { + this.emit('error', { type: 'MessageParseError', error: e, data: messageEvent.data @@ -2131,46 +1957,46 @@ var connection_Connection = (function (_super) { logger.debug('Event recd', pusherEvent); switch (pusherEvent.event) { case 'pusher:error': - _this.emit('error', { + this.emit('error', { type: 'PusherError', data: pusherEvent.data }); break; case 'pusher:ping': - _this.emit('ping'); + this.emit('ping'); break; case 'pusher:pong': - _this.emit('pong'); + this.emit('pong'); break; } - _this.emit('message', pusherEvent); + this.emit('message', pusherEvent); } }, - activity: function () { - _this.emit('activity'); + activity: () => { + this.emit('activity'); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function (closeEvent) { + closed: closeEvent => { unbindListeners(); if (closeEvent && closeEvent.code) { - _this.handleCloseEvent(closeEvent); + this.handleCloseEvent(closeEvent); } - _this.transport = null; - _this.emit('closed'); + this.transport = null; + this.emit('closed'); } }; - var unbindListeners = function () { - objectApply(listeners, function (listener, event) { - _this.transport.unbind(event, listener); + var unbindListeners = () => { + objectApply(listeners, (listener, event) => { + this.transport.unbind(event, listener); }); }; - objectApply(listeners, function (listener, event) { - _this.transport.bind(event, listener); + objectApply(listeners, (listener, event) => { + this.transport.bind(event, listener); }); - }; - Connection.prototype.handleCloseEvent = function (closeEvent) { + } + handleCloseEvent(closeEvent) { var action = protocol_protocol.getCloseAction(closeEvent); var error = protocol_protocol.getCloseError(closeEvent); if (error) { @@ -2179,136 +2005,114 @@ var connection_Connection = (function (_super) { if (action) { this.emit(action, { action: action, error: error }); } - }; - return Connection; -}(dispatcher)); -/* harmony default export */ var connection_connection = (connection_Connection); + } +} // CONCATENATED MODULE: ./src/core/connection/handshake/index.ts -var handshake_Handshake = (function () { - function Handshake(transport, callback) { +class handshake_Handshake { + constructor(transport, callback) { this.transport = transport; this.callback = callback; this.bindListeners(); } - Handshake.prototype.close = function () { + close() { this.unbindListeners(); this.transport.close(); - }; - Handshake.prototype.bindListeners = function () { - var _this = this; - this.onMessage = function (m) { - _this.unbindListeners(); + } + bindListeners() { + this.onMessage = m => { + this.unbindListeners(); var result; try { result = protocol_protocol.processHandshake(m); } catch (e) { - _this.finish('error', { error: e }); - _this.transport.close(); + this.finish('error', { error: e }); + this.transport.close(); return; } if (result.action === 'connected') { - _this.finish('connected', { - connection: new connection_connection(result.id, _this.transport), + this.finish('connected', { + connection: new connection_Connection(result.id, this.transport), activityTimeout: result.activityTimeout }); } else { - _this.finish(result.action, { error: result.error }); - _this.transport.close(); + this.finish(result.action, { error: result.error }); + this.transport.close(); } }; - this.onClosed = function (closeEvent) { - _this.unbindListeners(); + this.onClosed = closeEvent => { + this.unbindListeners(); var action = protocol_protocol.getCloseAction(closeEvent) || 'backoff'; var error = protocol_protocol.getCloseError(closeEvent); - _this.finish(action, { error: error }); + this.finish(action, { error: error }); }; this.transport.bind('message', this.onMessage); this.transport.bind('closed', this.onClosed); - }; - Handshake.prototype.unbindListeners = function () { + } + unbindListeners() { this.transport.unbind('message', this.onMessage); this.transport.unbind('closed', this.onClosed); - }; - Handshake.prototype.finish = function (action, params) { + } + finish(action, params) { this.callback(extend({ transport: this.transport, action: action }, params)); - }; - return Handshake; -}()); -/* harmony default export */ var connection_handshake = (handshake_Handshake); + } +} // CONCATENATED MODULE: ./src/core/timeline/timeline_sender.ts -var timeline_sender_TimelineSender = (function () { - function TimelineSender(timeline, options) { +class timeline_sender_TimelineSender { + constructor(timeline, options) { this.timeline = timeline; this.options = options || {}; } - TimelineSender.prototype.send = function (useTLS, callback) { + send(useTLS, callback) { if (this.timeline.isEmpty()) { return; } this.timeline.send(runtime.TimelineTransport.getAgent(this, useTLS), callback); - }; - return TimelineSender; -}()); -/* harmony default export */ var timeline_sender = (timeline_sender_TimelineSender); + } +} // CONCATENATED MODULE: ./src/core/channels/channel.ts -var channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var channel_Channel = (function (_super) { - channel_extends(Channel, _super); - function Channel(name, pusher) { - var _this = _super.call(this, function (event, data) { +class channel_Channel extends dispatcher_Dispatcher { + constructor(name, pusher) { + super(function (event, data) { logger.debug('No callbacks on ' + name + ' for ' + event); - }) || this; - _this.name = name; - _this.pusher = pusher; - _this.subscribed = false; - _this.subscriptionPending = false; - _this.subscriptionCancelled = false; - return _this; - } - Channel.prototype.authorize = function (socketId, callback) { + }); + this.name = name; + this.pusher = pusher; + this.subscribed = false; + this.subscriptionPending = false; + this.subscriptionCancelled = false; + } + authorize(socketId, callback) { return callback(null, { auth: '' }); - }; - Channel.prototype.trigger = function (event, data) { + } + trigger(event, data) { if (event.indexOf('client-') !== 0) { throw new BadEventName("Event '" + event + "' does not start with 'client-'"); } if (!this.subscribed) { var suffix = url_store.buildLogSuffix('triggeringClientEvents'); - logger.warn("Client event triggered before channel 'subscription_succeeded' event . " + suffix); + logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`); } return this.pusher.send_event(event, data, this.name); - }; - Channel.prototype.disconnect = function () { + } + disconnect() { this.subscribed = false; this.subscriptionPending = false; - }; - Channel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName === 'pusher_internal:subscription_succeeded') { @@ -2321,8 +2125,8 @@ var channel_Channel = (function (_super) { var metadata = {}; this.emit(eventName, data, metadata); } - }; - Channel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -2331,91 +2135,69 @@ var channel_Channel = (function (_super) { else { this.emit('pusher:subscription_succeeded', event.data); } - }; - Channel.prototype.handleSubscriptionCountEvent = function (event) { + } + handleSubscriptionCountEvent(event) { if (event.data.subscription_count) { this.subscriptionCount = event.data.subscription_count; } this.emit('pusher:subscription_count', event.data); - }; - Channel.prototype.subscribe = function () { - var _this = this; + } + subscribe() { if (this.subscribed) { return; } this.subscriptionPending = true; this.subscriptionCancelled = false; - this.authorize(this.pusher.connection.socket_id, function (error, data) { + this.authorize(this.pusher.connection.socket_id, (error, data) => { if (error) { - _this.subscriptionPending = false; + this.subscriptionPending = false; logger.error(error.toString()); - _this.emit('pusher:subscription_error', Object.assign({}, { + this.emit('pusher:subscription_error', Object.assign({}, { type: 'AuthError', error: error.message }, error instanceof HTTPAuthError ? { status: error.status } : {})); } else { - _this.pusher.send_event('pusher:subscribe', { + this.pusher.send_event('pusher:subscribe', { auth: data.auth, channel_data: data.channel_data, - channel: _this.name + channel: this.name }); } }); - }; - Channel.prototype.unsubscribe = function () { + } + unsubscribe() { this.subscribed = false; this.pusher.send_event('pusher:unsubscribe', { channel: this.name }); - }; - Channel.prototype.cancelSubscription = function () { + } + cancelSubscription() { this.subscriptionCancelled = true; - }; - Channel.prototype.reinstateSubscription = function () { + } + reinstateSubscription() { this.subscriptionCancelled = false; - }; - return Channel; -}(dispatcher)); -/* harmony default export */ var channels_channel = (channel_Channel); + } +} // CONCATENATED MODULE: ./src/core/channels/private_channel.ts -var private_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var PrivateChannel = (function (_super) { - private_channel_extends(PrivateChannel, _super); - function PrivateChannel() { - return _super !== null && _super.apply(this, arguments) || this; - } - PrivateChannel.prototype.authorize = function (socketId, callback) { +class private_channel_PrivateChannel extends channel_Channel { + authorize(socketId, callback) { return this.pusher.config.channelAuthorizer({ channelName: this.name, socketId: socketId }, callback); - }; - return PrivateChannel; -}(channels_channel)); -/* harmony default export */ var private_channel = (PrivateChannel); + } +} // CONCATENATED MODULE: ./src/core/channels/members.ts -var members_Members = (function () { - function Members() { +class members_Members { + constructor() { this.reset(); } - Members.prototype.get = function (id) { + get(id) { if (Object.prototype.hasOwnProperty.call(this.members, id)) { return { id: id, @@ -2425,60 +2207,44 @@ var members_Members = (function () { else { return null; } - }; - Members.prototype.each = function (callback) { - var _this = this; - objectApply(this.members, function (member, id) { - callback(_this.get(id)); + } + each(callback) { + objectApply(this.members, (member, id) => { + callback(this.get(id)); }); - }; - Members.prototype.setMyID = function (id) { + } + setMyID(id) { this.myID = id; - }; - Members.prototype.onSubscription = function (subscriptionData) { + } + onSubscription(subscriptionData) { this.members = subscriptionData.presence.hash; this.count = subscriptionData.presence.count; this.me = this.get(this.myID); - }; - Members.prototype.addMember = function (memberData) { + } + addMember(memberData) { if (this.get(memberData.user_id) === null) { this.count++; } this.members[memberData.user_id] = memberData.user_info; return this.get(memberData.user_id); - }; - Members.prototype.removeMember = function (memberData) { + } + removeMember(memberData) { var member = this.get(memberData.user_id); if (member) { delete this.members[memberData.user_id]; this.count--; } return member; - }; - Members.prototype.reset = function () { + } + reset() { this.members = {}; this.count = 0; this.myID = null; this.me = null; - }; - return Members; -}()); -/* harmony default export */ var members = (members_Members); + } +} // CONCATENATED MODULE: ./src/core/channels/presence_channel.ts -var presence_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -2488,80 +2254,42 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = (undefined && undefined.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var presence_channel_PresenceChannel = (function (_super) { - presence_channel_extends(PresenceChannel, _super); - function PresenceChannel(name, pusher) { - var _this = _super.call(this, name, pusher) || this; - _this.members = new members(); - return _this; - } - PresenceChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { return __awaiter(_this, void 0, void 0, function () { - var channelData, suffix; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!!error) return [3, 3]; - authData = authData; - if (!(authData.channel_data != null)) return [3, 1]; - channelData = JSON.parse(authData.channel_data); - this.members.setMyID(channelData.user_id); - return [3, 3]; - case 1: return [4, this.pusher.user.signinDonePromise]; - case 2: - _a.sent(); - if (this.pusher.user.user_data != null) { - this.members.setMyID(this.pusher.user.user_data.id); - } - else { - suffix = url_store.buildLogSuffix('authorizationEndpoint'); - logger.error("Invalid auth response for channel '" + this.name + "', " + - ("expected 'channel_data' field. " + suffix + ", ") + - "or the user should be signed in."); - callback('Invalid auth response'); - return [2]; - } - _a.label = 3; - case 3: - callback(error, authData); - return [2]; +class presence_channel_PresenceChannel extends private_channel_PrivateChannel { + constructor(name, pusher) { + super(name, pusher); + this.members = new members_Members(); + } + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () { + if (!error) { + authData = authData; + if (authData.channel_data != null) { + var channelData = JSON.parse(authData.channel_data); + this.members.setMyID(channelData.user_id); } - }); - }); }); - }; - PresenceChannel.prototype.handleEvent = function (event) { + else { + yield this.pusher.user.signinDonePromise; + if (this.pusher.user.user_data != null) { + this.members.setMyID(this.pusher.user.user_data.id); + } + else { + let suffix = url_store.buildLogSuffix('authorizationEndpoint'); + logger.error(`Invalid auth response for channel '${this.name}', ` + + `expected 'channel_data' field. ${suffix}, ` + + `or the user should be signed in.`); + callback('Invalid auth response'); + return; + } + } + } + callback(error, authData); + })); + } + handleEvent(event) { var eventName = event.event; if (eventName.indexOf('pusher_internal:') === 0) { this.handleInternalEvent(event); @@ -2574,8 +2302,8 @@ var presence_channel_PresenceChannel = (function (_super) { } this.emit(eventName, data, metadata); } - }; - PresenceChannel.prototype.handleInternalEvent = function (event) { + } + handleInternalEvent(event) { var eventName = event.event; var data = event.data; switch (eventName) { @@ -2596,8 +2324,8 @@ var presence_channel_PresenceChannel = (function (_super) { } break; } - }; - PresenceChannel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -2607,14 +2335,12 @@ var presence_channel_PresenceChannel = (function (_super) { this.members.onSubscription(event.data); this.emit('pusher:subscription_succeeded', this.members); } - }; - PresenceChannel.prototype.disconnect = function () { + } + disconnect() { this.members.reset(); - _super.prototype.disconnect.call(this); - }; - return PresenceChannel; -}(private_channel)); -/* harmony default export */ var presence_channel = (presence_channel_PresenceChannel); + super.disconnect(); + } +} // EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js var utf8 = __webpack_require__(1); @@ -2623,64 +2349,47 @@ var utf8 = __webpack_require__(1); var base64 = __webpack_require__(0); // CONCATENATED MODULE: ./src/core/channels/encrypted_channel.ts -var encrypted_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var encrypted_channel_EncryptedChannel = (function (_super) { - encrypted_channel_extends(EncryptedChannel, _super); - function EncryptedChannel(name, pusher, nacl) { - var _this = _super.call(this, name, pusher) || this; - _this.key = null; - _this.nacl = nacl; - return _this; +class encrypted_channel_EncryptedChannel extends private_channel_PrivateChannel { + constructor(name, pusher, nacl) { + super(name, pusher); + this.key = null; + this.nacl = nacl; } - EncryptedChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => { if (error) { callback(error, authData); return; } - var sharedSecret = authData['shared_secret']; + let sharedSecret = authData['shared_secret']; if (!sharedSecret) { - callback(new Error("No shared_secret key in auth payload for encrypted channel: " + _this.name), null); + callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null); return; } - _this.key = Object(base64["decode"])(sharedSecret); + this.key = Object(base64["decode"])(sharedSecret); delete authData['shared_secret']; callback(null, authData); }); - }; - EncryptedChannel.prototype.trigger = function (event, data) { + } + trigger(event, data) { throw new UnsupportedFeature('Client events are not currently supported for encrypted channels'); - }; - EncryptedChannel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { - _super.prototype.handleEvent.call(this, event); + super.handleEvent(event); return; } this.handleEncryptedEvent(eventName, data); - }; - EncryptedChannel.prototype.handleEncryptedEvent = function (event, data) { - var _this = this; + } + handleEncryptedEvent(event, data) { if (!this.key) { logger.debug('Received encrypted event before key has been retrieved from the authEndpoint'); return; @@ -2690,98 +2399,81 @@ var encrypted_channel_EncryptedChannel = (function (_super) { data); return; } - var cipherText = Object(base64["decode"])(data.ciphertext); + let cipherText = Object(base64["decode"])(data.ciphertext); if (cipherText.length < this.nacl.secretbox.overheadLength) { - logger.error("Expected encrypted event ciphertext length to be " + this.nacl.secretbox.overheadLength + ", got: " + cipherText.length); + logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`); return; } - var nonce = Object(base64["decode"])(data.nonce); + let nonce = Object(base64["decode"])(data.nonce); if (nonce.length < this.nacl.secretbox.nonceLength) { - logger.error("Expected encrypted event nonce length to be " + this.nacl.secretbox.nonceLength + ", got: " + nonce.length); + logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`); return; } - var bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); + let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'); - this.authorize(this.pusher.connection.socket_id, function (error, authData) { + this.authorize(this.pusher.connection.socket_id, (error, authData) => { if (error) { - logger.error("Failed to make a request to the authEndpoint: " + authData + ". Unable to fetch new key, so dropping encrypted event"); + logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`); return; } - bytes = _this.nacl.secretbox.open(cipherText, nonce, _this.key); + bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { - logger.error("Failed to decrypt event with new key. Dropping encrypted event"); + logger.error(`Failed to decrypt event with new key. Dropping encrypted event`); return; } - _this.emit(event, _this.getDataToEmit(bytes)); + this.emit(event, this.getDataToEmit(bytes)); return; }); return; } this.emit(event, this.getDataToEmit(bytes)); - }; - EncryptedChannel.prototype.getDataToEmit = function (bytes) { - var raw = Object(utf8["decode"])(bytes); + } + getDataToEmit(bytes) { + let raw = Object(utf8["decode"])(bytes); try { return JSON.parse(raw); } catch (_a) { return raw; } - }; - return EncryptedChannel; -}(private_channel)); -/* harmony default export */ var encrypted_channel = (encrypted_channel_EncryptedChannel); + } +} // CONCATENATED MODULE: ./src/core/connection/connection_manager.ts -var connection_manager_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_manager_ConnectionManager = (function (_super) { - connection_manager_extends(ConnectionManager, _super); - function ConnectionManager(key, options) { - var _this = _super.call(this) || this; - _this.state = 'initialized'; - _this.connection = null; - _this.key = key; - _this.options = options; - _this.timeline = _this.options.timeline; - _this.usingTLS = _this.options.useTLS; - _this.errorCallbacks = _this.buildErrorCallbacks(); - _this.connectionCallbacks = _this.buildConnectionCallbacks(_this.errorCallbacks); - _this.handshakeCallbacks = _this.buildHandshakeCallbacks(_this.errorCallbacks); +class connection_manager_ConnectionManager extends dispatcher_Dispatcher { + constructor(key, options) { + super(); + this.state = 'initialized'; + this.connection = null; + this.key = key; + this.options = options; + this.timeline = this.options.timeline; + this.usingTLS = this.options.useTLS; + this.errorCallbacks = this.buildErrorCallbacks(); + this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks); + this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks); var Network = runtime.getNetwork(); - Network.bind('online', function () { - _this.timeline.info({ netinfo: 'online' }); - if (_this.state === 'connecting' || _this.state === 'unavailable') { - _this.retryIn(0); + Network.bind('online', () => { + this.timeline.info({ netinfo: 'online' }); + if (this.state === 'connecting' || this.state === 'unavailable') { + this.retryIn(0); } }); - Network.bind('offline', function () { - _this.timeline.info({ netinfo: 'offline' }); - if (_this.connection) { - _this.sendActivityCheck(); + Network.bind('offline', () => { + this.timeline.info({ netinfo: 'offline' }); + if (this.connection) { + this.sendActivityCheck(); } }); - _this.updateStrategy(); - return _this; + this.updateStrategy(); } - ConnectionManager.prototype.connect = function () { + connect() { if (this.connection || this.runner) { return; } @@ -2792,59 +2484,58 @@ var connection_manager_ConnectionManager = (function (_super) { this.updateState('connecting'); this.startConnecting(); this.setUnavailableTimer(); - }; - ConnectionManager.prototype.send = function (data) { + } + send(data) { if (this.connection) { return this.connection.send(data); } else { return false; } - }; - ConnectionManager.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { if (this.connection) { return this.connection.send_event(name, data, channel); } else { return false; } - }; - ConnectionManager.prototype.disconnect = function () { + } + disconnect() { this.disconnectInternally(); this.updateState('disconnected'); - }; - ConnectionManager.prototype.isUsingTLS = function () { + } + isUsingTLS() { return this.usingTLS; - }; - ConnectionManager.prototype.startConnecting = function () { - var _this = this; - var callback = function (error, handshake) { + } + startConnecting() { + var callback = (error, handshake) => { if (error) { - _this.runner = _this.strategy.connect(0, callback); + this.runner = this.strategy.connect(0, callback); } else { if (handshake.action === 'error') { - _this.emit('error', { + this.emit('error', { type: 'HandshakeError', error: handshake.error }); - _this.timeline.error({ handshakeError: handshake.error }); + this.timeline.error({ handshakeError: handshake.error }); } else { - _this.abortConnecting(); - _this.handshakeCallbacks[handshake.action](handshake); + this.abortConnecting(); + this.handshakeCallbacks[handshake.action](handshake); } } }; this.runner = this.strategy.connect(0, callback); - }; - ConnectionManager.prototype.abortConnecting = function () { + } + abortConnecting() { if (this.runner) { this.runner.abort(); this.runner = null; } - }; - ConnectionManager.prototype.disconnectInternally = function () { + } + disconnectInternally() { this.abortConnecting(); this.clearRetryTimer(); this.clearUnavailableTimer(); @@ -2852,136 +2543,129 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.abandonConnection(); connection.close(); } - }; - ConnectionManager.prototype.updateStrategy = function () { + } + updateStrategy() { this.strategy = this.options.getStrategy({ key: this.key, timeline: this.timeline, useTLS: this.usingTLS }); - }; - ConnectionManager.prototype.retryIn = function (delay) { - var _this = this; + } + retryIn(delay) { this.timeline.info({ action: 'retry', delay: delay }); if (delay > 0) { this.emit('connecting_in', Math.round(delay / 1000)); } - this.retryTimer = new OneOffTimer(delay || 0, function () { - _this.disconnectInternally(); - _this.connect(); + this.retryTimer = new timers_OneOffTimer(delay || 0, () => { + this.disconnectInternally(); + this.connect(); }); - }; - ConnectionManager.prototype.clearRetryTimer = function () { + } + clearRetryTimer() { if (this.retryTimer) { this.retryTimer.ensureAborted(); this.retryTimer = null; } - }; - ConnectionManager.prototype.setUnavailableTimer = function () { - var _this = this; - this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, function () { - _this.updateState('unavailable'); + } + setUnavailableTimer() { + this.unavailableTimer = new timers_OneOffTimer(this.options.unavailableTimeout, () => { + this.updateState('unavailable'); }); - }; - ConnectionManager.prototype.clearUnavailableTimer = function () { + } + clearUnavailableTimer() { if (this.unavailableTimer) { this.unavailableTimer.ensureAborted(); } - }; - ConnectionManager.prototype.sendActivityCheck = function () { - var _this = this; + } + sendActivityCheck() { this.stopActivityCheck(); this.connection.ping(); - this.activityTimer = new OneOffTimer(this.options.pongTimeout, function () { - _this.timeline.error({ pong_timed_out: _this.options.pongTimeout }); - _this.retryIn(0); + this.activityTimer = new timers_OneOffTimer(this.options.pongTimeout, () => { + this.timeline.error({ pong_timed_out: this.options.pongTimeout }); + this.retryIn(0); }); - }; - ConnectionManager.prototype.resetActivityCheck = function () { - var _this = this; + } + resetActivityCheck() { this.stopActivityCheck(); if (this.connection && !this.connection.handlesActivityChecks()) { - this.activityTimer = new OneOffTimer(this.activityTimeout, function () { - _this.sendActivityCheck(); + this.activityTimer = new timers_OneOffTimer(this.activityTimeout, () => { + this.sendActivityCheck(); }); } - }; - ConnectionManager.prototype.stopActivityCheck = function () { + } + stopActivityCheck() { if (this.activityTimer) { this.activityTimer.ensureAborted(); } - }; - ConnectionManager.prototype.buildConnectionCallbacks = function (errorCallbacks) { - var _this = this; + } + buildConnectionCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - message: function (message) { - _this.resetActivityCheck(); - _this.emit('message', message); + message: message => { + this.resetActivityCheck(); + this.emit('message', message); }, - ping: function () { - _this.send_event('pusher:pong', {}); + ping: () => { + this.send_event('pusher:pong', {}); }, - activity: function () { - _this.resetActivityCheck(); + activity: () => { + this.resetActivityCheck(); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function () { - _this.abandonConnection(); - if (_this.shouldRetry()) { - _this.retryIn(1000); + closed: () => { + this.abandonConnection(); + if (this.shouldRetry()) { + this.retryIn(1000); } } }); - }; - ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) { - var _this = this; + } + buildHandshakeCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - connected: function (handshake) { - _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); - _this.clearUnavailableTimer(); - _this.setConnection(handshake.connection); - _this.socket_id = _this.connection.id; - _this.updateState('connected', { socket_id: _this.socket_id }); + connected: (handshake) => { + this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); + this.clearUnavailableTimer(); + this.setConnection(handshake.connection); + this.socket_id = this.connection.id; + this.updateState('connected', { socket_id: this.socket_id }); } }); - }; - ConnectionManager.prototype.buildErrorCallbacks = function () { - var _this = this; - var withErrorEmitted = function (callback) { - return function (result) { + } + buildErrorCallbacks() { + let withErrorEmitted = callback => { + return (result) => { if (result.error) { - _this.emit('error', { type: 'WebSocketError', error: result.error }); + this.emit('error', { type: 'WebSocketError', error: result.error }); } callback(result); }; }; return { - tls_only: withErrorEmitted(function () { - _this.usingTLS = true; - _this.updateStrategy(); - _this.retryIn(0); + tls_only: withErrorEmitted(() => { + this.usingTLS = true; + this.updateStrategy(); + this.retryIn(0); }), - refused: withErrorEmitted(function () { - _this.disconnect(); + refused: withErrorEmitted(() => { + this.disconnect(); }), - backoff: withErrorEmitted(function () { - _this.retryIn(1000); + backoff: withErrorEmitted(() => { + this.retryIn(1000); }), - retry: withErrorEmitted(function () { - _this.retryIn(0); + retry: withErrorEmitted(() => { + this.retryIn(0); }) }; - }; - ConnectionManager.prototype.setConnection = function (connection) { + } + setConnection(connection) { this.connection = connection; for (var event in this.connectionCallbacks) { this.connection.bind(event, this.connectionCallbacks[event]); } this.resetActivityCheck(); - }; - ConnectionManager.prototype.abandonConnection = function () { + } + abandonConnection() { if (!this.connection) { return; } @@ -2992,8 +2676,8 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.connection; this.connection = null; return connection; - }; - ConnectionManager.prototype.updateState = function (newState, data) { + } + updateState(newState, data) { var previousState = this.state; this.state = newState; if (previousState !== newState) { @@ -3006,56 +2690,52 @@ var connection_manager_ConnectionManager = (function (_super) { this.emit('state_change', { previous: previousState, current: newState }); this.emit(newState, data); } - }; - ConnectionManager.prototype.shouldRetry = function () { + } + shouldRetry() { return this.state === 'connecting' || this.state === 'connected'; - }; - return ConnectionManager; -}(dispatcher)); -/* harmony default export */ var connection_manager = (connection_manager_ConnectionManager); + } +} // CONCATENATED MODULE: ./src/core/channels/channels.ts -var channels_Channels = (function () { - function Channels() { +class channels_Channels { + constructor() { this.channels = {}; } - Channels.prototype.add = function (name, pusher) { + add(name, pusher) { if (!this.channels[name]) { this.channels[name] = createChannel(name, pusher); } return this.channels[name]; - }; - Channels.prototype.all = function () { + } + all() { return values(this.channels); - }; - Channels.prototype.find = function (name) { + } + find(name) { return this.channels[name]; - }; - Channels.prototype.remove = function (name) { + } + remove(name) { var channel = this.channels[name]; delete this.channels[name]; return channel; - }; - Channels.prototype.disconnect = function () { + } + disconnect() { objectApply(this.channels, function (channel) { channel.disconnect(); }); - }; - return Channels; -}()); -/* harmony default export */ var channels = (channels_Channels); + } +} function createChannel(name, pusher) { if (name.indexOf('private-encrypted-') === 0) { if (pusher.config.nacl) { return factory.createEncryptedChannel(name, pusher, pusher.config.nacl); } - var errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; - var suffix = url_store.buildLogSuffix('encryptedChannelSupport'); - throw new UnsupportedFeature(errMsg + ". " + suffix); + let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; + let suffix = url_store.buildLogSuffix('encryptedChannelSupport'); + throw new UnsupportedFeature(`${errMsg}. ${suffix}`); } else if (name.indexOf('private-') === 0) { return factory.createPrivateChannel(name, pusher); @@ -3082,97 +2762,94 @@ function createChannel(name, pusher) { var Factory = { - createChannels: function () { - return new channels(); + createChannels() { + return new channels_Channels(); }, - createConnectionManager: function (key, options) { - return new connection_manager(key, options); + createConnectionManager(key, options) { + return new connection_manager_ConnectionManager(key, options); }, - createChannel: function (name, pusher) { - return new channels_channel(name, pusher); + createChannel(name, pusher) { + return new channel_Channel(name, pusher); }, - createPrivateChannel: function (name, pusher) { - return new private_channel(name, pusher); + createPrivateChannel(name, pusher) { + return new private_channel_PrivateChannel(name, pusher); }, - createPresenceChannel: function (name, pusher) { - return new presence_channel(name, pusher); + createPresenceChannel(name, pusher) { + return new presence_channel_PresenceChannel(name, pusher); }, - createEncryptedChannel: function (name, pusher, nacl) { - return new encrypted_channel(name, pusher, nacl); + createEncryptedChannel(name, pusher, nacl) { + return new encrypted_channel_EncryptedChannel(name, pusher, nacl); }, - createTimelineSender: function (timeline, options) { - return new timeline_sender(timeline, options); + createTimelineSender(timeline, options) { + return new timeline_sender_TimelineSender(timeline, options); }, - createHandshake: function (transport, callback) { - return new connection_handshake(transport, callback); + createHandshake(transport, callback) { + return new handshake_Handshake(transport, callback); }, - createAssistantToTheTransportManager: function (manager, transport, options) { - return new assistant_to_the_transport_manager(manager, transport, options); + createAssistantToTheTransportManager(manager, transport, options) { + return new assistant_to_the_transport_manager_AssistantToTheTransportManager(manager, transport, options); } }; /* harmony default export */ var factory = (Factory); // CONCATENATED MODULE: ./src/core/transports/transport_manager.ts -var transport_manager_TransportManager = (function () { - function TransportManager(options) { +class transport_manager_TransportManager { + constructor(options) { this.options = options || {}; this.livesLeft = this.options.lives || Infinity; } - TransportManager.prototype.getAssistant = function (transport) { + getAssistant(transport) { return factory.createAssistantToTheTransportManager(this, transport, { minPingDelay: this.options.minPingDelay, maxPingDelay: this.options.maxPingDelay }); - }; - TransportManager.prototype.isAlive = function () { + } + isAlive() { return this.livesLeft > 0; - }; - TransportManager.prototype.reportDeath = function () { + } + reportDeath() { this.livesLeft -= 1; - }; - return TransportManager; -}()); -/* harmony default export */ var transport_manager = (transport_manager_TransportManager); + } +} // CONCATENATED MODULE: ./src/core/strategies/sequential_strategy.ts -var sequential_strategy_SequentialStrategy = (function () { - function SequentialStrategy(strategies, options) { +class sequential_strategy_SequentialStrategy { + constructor(strategies, options) { this.strategies = strategies; this.loop = Boolean(options.loop); this.failFast = Boolean(options.failFast); this.timeout = options.timeout; this.timeoutLimit = options.timeoutLimit; } - SequentialStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - SequentialStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { var strategies = this.strategies; var current = 0; var timeout = this.timeout; var runner = null; - var tryNextStrategy = function (error, handshake) { + var tryNextStrategy = (error, handshake) => { if (handshake) { callback(null, handshake); } else { current = current + 1; - if (_this.loop) { + if (this.loop) { current = current % strategies.length; } if (current < strategies.length) { if (timeout) { timeout = timeout * 2; - if (_this.timeoutLimit) { - timeout = Math.min(timeout, _this.timeoutLimit); + if (this.timeoutLimit) { + timeout = Math.min(timeout, this.timeoutLimit); } } - runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy); + runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy); } else { callback(true); @@ -3191,12 +2868,12 @@ var sequential_strategy_SequentialStrategy = (function () { } } }; - }; - SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) { + } + tryStrategy(strategy, minPriority, options, callback) { var timer = null; var runner = null; if (options.timeout > 0) { - timer = new OneOffTimer(options.timeout, function () { + timer = new timers_OneOffTimer(options.timeout, function () { runner.abort(); callback(true); }); @@ -3221,22 +2898,20 @@ var sequential_strategy_SequentialStrategy = (function () { runner.forceMinPriority(p); } }; - }; - return SequentialStrategy; -}()); -/* harmony default export */ var sequential_strategy = (sequential_strategy_SequentialStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/best_connected_ever_strategy.ts -var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { - function BestConnectedEverStrategy(strategies) { +class best_connected_ever_strategy_BestConnectedEverStrategy { + constructor(strategies) { this.strategies = strategies; } - BestConnectedEverStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { return connect(this.strategies, minPriority, function (i, runners) { return function (error, handshake) { runners[i].error = error; @@ -3252,10 +2927,8 @@ var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { callback(null, handshake); }; }); - }; - return BestConnectedEverStrategy; -}()); -/* harmony default export */ var best_connected_ever_strategy = (best_connected_ever_strategy_BestConnectedEverStrategy); + } +} function connect(strategies, minPriority, callbackBuilder) { var runners = map(strategies, function (strategy, i, _, rs) { return strategy.connect(minPriority, callbackBuilder(i, rs)); @@ -3288,18 +2961,18 @@ function abortRunner(runner) { -var cached_strategy_CachedStrategy = (function () { - function CachedStrategy(strategy, transports, options) { +class cached_strategy_CachedStrategy { + constructor(strategy, transports, options) { this.strategy = strategy; this.transports = transports; this.ttl = options.ttl || 1800 * 1000; this.usingTLS = options.useTLS; this.timeline = options.timeline; } - CachedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - CachedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var usingTLS = this.usingTLS; var info = fetchTransportCache(usingTLS); var strategies = [this.strategy]; @@ -3311,7 +2984,7 @@ var cached_strategy_CachedStrategy = (function () { transport: info.transport, latency: info.latency }); - strategies.push(new sequential_strategy([transport], { + strategies.push(new sequential_strategy_SequentialStrategy([transport], { timeout: info.latency * 2 + 1000, failFast: true })); @@ -3347,10 +3020,8 @@ var cached_strategy_CachedStrategy = (function () { } } }; - }; - return CachedStrategy; -}()); -/* harmony default export */ var cached_strategy = (cached_strategy_CachedStrategy); + } +} function getTransportCacheKey(usingTLS) { return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS'); } @@ -3396,19 +3067,18 @@ function flushTransportCache(usingTLS) { // CONCATENATED MODULE: ./src/core/strategies/delayed_strategy.ts -var delayed_strategy_DelayedStrategy = (function () { - function DelayedStrategy(strategy, _a) { - var number = _a.delay; +class delayed_strategy_DelayedStrategy { + constructor(strategy, { delay: number }) { this.strategy = strategy; this.options = { delay: number }; } - DelayedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - DelayedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var strategy = this.strategy; var runner; - var timer = new OneOffTimer(this.options.delay, function () { + var timer = new timers_OneOffTimer(this.options.delay, function () { runner = strategy.connect(minPriority, callback); }); return { @@ -3425,39 +3095,35 @@ var delayed_strategy_DelayedStrategy = (function () { } } }; - }; - return DelayedStrategy; -}()); -/* harmony default export */ var delayed_strategy = (delayed_strategy_DelayedStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/if_strategy.ts -var IfStrategy = (function () { - function IfStrategy(test, trueBranch, falseBranch) { +class IfStrategy { + constructor(test, trueBranch, falseBranch) { this.test = test; this.trueBranch = trueBranch; this.falseBranch = falseBranch; } - IfStrategy.prototype.isSupported = function () { + isSupported() { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.isSupported(); - }; - IfStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.connect(minPriority, callback); - }; - return IfStrategy; -}()); -/* harmony default export */ var if_strategy = (IfStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/first_connected_strategy.ts -var FirstConnectedStrategy = (function () { - function FirstConnectedStrategy(strategy) { +class FirstConnectedStrategy { + constructor(strategy) { this.strategy = strategy; } - FirstConnectedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - FirstConnectedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var runner = this.strategy.connect(minPriority, function (error, handshake) { if (handshake) { runner.abort(); @@ -3465,10 +3131,8 @@ var FirstConnectedStrategy = (function () { callback(error, handshake); }); return runner; - }; - return FirstConnectedStrategy; -}()); -/* harmony default export */ var first_connected_strategy = (FirstConnectedStrategy); + } +} // CONCATENATED MODULE: ./src/runtimes/web/default_strategy.ts @@ -3508,12 +3172,12 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { timeout: 15000, timeoutLimit: 60000 }; - var ws_manager = new transport_manager({ + var ws_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout }); - var streaming_manager = new transport_manager({ + var streaming_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout @@ -3525,37 +3189,37 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { var xdr_streaming_transport = defineTransportStrategy('xdr_streaming', 'xdr_streaming', 1, sockjs_options, streaming_manager); var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, sockjs_options); var xdr_polling_transport = defineTransportStrategy('xdr_polling', 'xdr_polling', 1, sockjs_options); - var ws_loop = new sequential_strategy([ws_transport], timeouts); - var wss_loop = new sequential_strategy([wss_transport], timeouts); - var sockjs_loop = new sequential_strategy([sockjs_transport], timeouts); - var streaming_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport) + var ws_loop = new sequential_strategy_SequentialStrategy([ws_transport], timeouts); + var wss_loop = new sequential_strategy_SequentialStrategy([wss_transport], timeouts); + var sockjs_loop = new sequential_strategy_SequentialStrategy([sockjs_transport], timeouts); + var streaming_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport) ], timeouts); - var polling_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport) + var polling_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport) ], timeouts); - var http_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy([ + var http_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy_BestConnectedEverStrategy([ streaming_loop, - new delayed_strategy(polling_loop, { delay: 4000 }) + new delayed_strategy_DelayedStrategy(polling_loop, { delay: 4000 }) ]), polling_loop) ], timeouts); - var http_fallback_loop = new if_strategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop); + var http_fallback_loop = new IfStrategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop); var wsStrategy; if (baseOptions.useTLS) { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(http_fallback_loop, { delay: 2000 }) + new delayed_strategy_DelayedStrategy(http_fallback_loop, { delay: 2000 }) ]); } else { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(wss_loop, { delay: 2000 }), - new delayed_strategy(http_fallback_loop, { delay: 5000 }) + new delayed_strategy_DelayedStrategy(wss_loop, { delay: 2000 }), + new delayed_strategy_DelayedStrategy(http_fallback_loop, { delay: 5000 }) ]); } - return new cached_strategy(new first_connected_strategy(new if_strategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, { + return new cached_strategy_CachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, { ttl: 1800000, timeline: baseOptions.timeline, useTLS: baseOptions.useTLS @@ -3629,37 +3293,21 @@ var http_xdomain_request_hooks = { /* harmony default export */ var http_xdomain_request = (http_xdomain_request_hooks); // CONCATENATED MODULE: ./src/core/http/http_request.ts -var http_request_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MAX_BUFFER_LENGTH = 256 * 1024; -var http_request_HTTPRequest = (function (_super) { - http_request_extends(HTTPRequest, _super); - function HTTPRequest(hooks, method, url) { - var _this = _super.call(this) || this; - _this.hooks = hooks; - _this.method = method; - _this.url = url; - return _this; +const MAX_BUFFER_LENGTH = 256 * 1024; +class http_request_HTTPRequest extends dispatcher_Dispatcher { + constructor(hooks, method, url) { + super(); + this.hooks = hooks; + this.method = method; + this.url = url; } - HTTPRequest.prototype.start = function (payload) { - var _this = this; + start(payload) { this.position = 0; this.xhr = this.hooks.getRequest(this); - this.unloader = function () { - _this.close(); + this.unloader = () => { + this.close(); }; runtime.addUnloadListener(this.unloader); this.xhr.open(this.method, this.url, true); @@ -3667,8 +3315,8 @@ var http_request_HTTPRequest = (function (_super) { this.xhr.setRequestHeader('Content-Type', 'application/json'); } this.xhr.send(payload); - }; - HTTPRequest.prototype.close = function () { + } + close() { if (this.unloader) { runtime.removeUnloadListener(this.unloader); this.unloader = null; @@ -3677,8 +3325,8 @@ var http_request_HTTPRequest = (function (_super) { this.hooks.abortRequest(this.xhr); this.xhr = null; } - }; - HTTPRequest.prototype.onChunk = function (status, data) { + } + onChunk(status, data) { while (true) { var chunk = this.advanceBuffer(data); if (chunk) { @@ -3691,8 +3339,8 @@ var http_request_HTTPRequest = (function (_super) { if (this.isBufferTooLong(data)) { this.emit('buffer_too_long'); } - }; - HTTPRequest.prototype.advanceBuffer = function (buffer) { + } + advanceBuffer(buffer) { var unreadData = buffer.slice(this.position); var endOfLinePosition = unreadData.indexOf('\n'); if (endOfLinePosition !== -1) { @@ -3702,13 +3350,11 @@ var http_request_HTTPRequest = (function (_super) { else { return null; } - }; - HTTPRequest.prototype.isBufferTooLong = function (buffer) { + } + isBufferTooLong(buffer) { return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH; - }; - return HTTPRequest; -}(dispatcher)); -/* harmony default export */ var http_request = (http_request_HTTPRequest); + } +} // CONCATENATED MODULE: ./src/core/http/state.ts var State; @@ -3724,24 +3370,24 @@ var State; var autoIncrement = 1; -var http_socket_HTTPSocket = (function () { - function HTTPSocket(hooks, url) { +class http_socket_HTTPSocket { + constructor(hooks, url) { this.hooks = hooks; this.session = randomNumber(1000) + '/' + randomString(8); this.location = getLocation(url); this.readyState = state.CONNECTING; this.openStream(); } - HTTPSocket.prototype.send = function (payload) { + send(payload) { return this.sendRaw(JSON.stringify([payload])); - }; - HTTPSocket.prototype.ping = function () { + } + ping() { this.hooks.sendHeartbeat(this); - }; - HTTPSocket.prototype.close = function (code, reason) { + } + close(code, reason) { this.onClose(code, reason, true); - }; - HTTPSocket.prototype.sendRaw = function (payload) { + } + sendRaw(payload) { if (this.readyState === state.OPEN) { try { runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload); @@ -3754,12 +3400,12 @@ var http_socket_HTTPSocket = (function () { else { return false; } - }; - HTTPSocket.prototype.reconnect = function () { + } + reconnect() { this.closeStream(); this.openStream(); - }; - HTTPSocket.prototype.onClose = function (code, reason, wasClean) { + } + onClose(code, reason, wasClean) { this.closeStream(); this.readyState = state.CLOSED; if (this.onclose) { @@ -3769,8 +3415,8 @@ var http_socket_HTTPSocket = (function () { wasClean: wasClean }); } - }; - HTTPSocket.prototype.onChunk = function (chunk) { + } + onChunk(chunk) { if (chunk.status !== 200) { return; } @@ -3802,8 +3448,8 @@ var http_socket_HTTPSocket = (function () { this.onClose(payload[0], payload[1], true); break; } - }; - HTTPSocket.prototype.onOpen = function (options) { + } + onOpen(options) { if (this.readyState === state.CONNECTING) { if (options && options.hostname) { this.location.base = replaceHost(this.location.base, options.hostname); @@ -3816,53 +3462,51 @@ var http_socket_HTTPSocket = (function () { else { this.onClose(1006, 'Server lost session', true); } - }; - HTTPSocket.prototype.onEvent = function (event) { + } + onEvent(event) { if (this.readyState === state.OPEN && this.onmessage) { this.onmessage({ data: event }); } - }; - HTTPSocket.prototype.onActivity = function () { + } + onActivity() { if (this.onactivity) { this.onactivity(); } - }; - HTTPSocket.prototype.onError = function (error) { + } + onError(error) { if (this.onerror) { this.onerror(error); } - }; - HTTPSocket.prototype.openStream = function () { - var _this = this; + } + openStream() { this.stream = runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))); - this.stream.bind('chunk', function (chunk) { - _this.onChunk(chunk); + this.stream.bind('chunk', chunk => { + this.onChunk(chunk); }); - this.stream.bind('finished', function (status) { - _this.hooks.onFinished(_this, status); + this.stream.bind('finished', status => { + this.hooks.onFinished(this, status); }); - this.stream.bind('buffer_too_long', function () { - _this.reconnect(); + this.stream.bind('buffer_too_long', () => { + this.reconnect(); }); try { this.stream.start(); } catch (error) { - util.defer(function () { - _this.onError(error); - _this.onClose(1006, 'Could not start streaming', false); + util.defer(() => { + this.onError(error); + this.onClose(1006, 'Could not start streaming', false); }); } - }; - HTTPSocket.prototype.closeStream = function () { + } + closeStream() { if (this.stream) { this.stream.unbind_all(); this.stream.close(); this.stream = null; } - }; - return HTTPSocket; -}()); + } +} function getLocation(url) { var parts = /([^\?]*)\/*(\??.*)/.exec(url); return { @@ -3969,20 +3613,20 @@ var http_xhr_request_hooks = { var HTTP = { - createStreamingSocket: function (url) { + createStreamingSocket(url) { return this.createSocket(http_streaming_socket, url); }, - createPollingSocket: function (url) { + createPollingSocket(url) { return this.createSocket(http_polling_socket, url); }, - createSocket: function (hooks, url) { + createSocket(hooks, url) { return new http_socket(hooks, url); }, - createXHR: function (method, url) { + createXHR(method, url) { return this.createRequest(http_xhr_request, method, url); }, - createRequest: function (hooks, method, url) { - return new http_request(hooks, method, url); + createRequest(hooks, method, url) { + return new http_request_HTTPRequest(hooks, method, url); } }; /* harmony default export */ var http_http = (HTTP); @@ -4018,17 +3662,16 @@ var Runtime = { transportConnectionInitializer: transport_connection_initializer, HTTPFactory: web_http_http, TimelineTransport: jsonp_timeline, - getXHRAPI: function () { + getXHRAPI() { return window.XMLHttpRequest; }, - getWebSocketAPI: function () { + getWebSocketAPI() { return window.WebSocket || window.MozWebSocket; }, - setup: function (PusherClass) { - var _this = this; + setup(PusherClass) { window.Pusher = PusherClass; - var initializeOnDocumentBody = function () { - _this.onDocumentBody(PusherClass.ready); + var initializeOnDocumentBody = () => { + this.onDocumentBody(PusherClass.ready); }; if (!window.JSON) { Dependencies.load('json2', {}, initializeOnDocumentBody); @@ -4037,33 +3680,32 @@ var Runtime = { initializeOnDocumentBody(); } }, - getDocument: function () { + getDocument() { return document; }, - getProtocol: function () { + getProtocol() { return this.getDocument().location.protocol; }, - getAuthorizers: function () { + getAuthorizers() { return { ajax: xhr_auth, jsonp: jsonp_auth }; }, - onDocumentBody: function (callback) { - var _this = this; + onDocumentBody(callback) { if (document.body) { callback(); } else { - setTimeout(function () { - _this.onDocumentBody(callback); + setTimeout(() => { + this.onDocumentBody(callback); }, 0); } }, - createJSONPRequest: function (url, data) { - return new jsonp_request(url, data); + createJSONPRequest(url, data) { + return new jsonp_request_JSONPRequest(url, data); }, - createScriptRequest: function (src) { - return new script_request(src); + createScriptRequest(src) { + return new ScriptRequest(src); }, - getLocalStorage: function () { + getLocalStorage() { try { return window.localStorage; } @@ -4071,7 +3713,7 @@ var Runtime = { return undefined; } }, - createXHR: function () { + createXHR() { if (this.getXHRAPI()) { return this.createXMLHttpRequest(); } @@ -4079,21 +3721,21 @@ var Runtime = { return this.createMicrosoftXHR(); } }, - createXMLHttpRequest: function () { + createXMLHttpRequest() { var Constructor = this.getXHRAPI(); return new Constructor(); }, - createMicrosoftXHR: function () { + createMicrosoftXHR() { return new ActiveXObject('Microsoft.XMLHTTP'); }, - getNetwork: function () { + getNetwork() { return net_info_Network; }, - createWebSocket: function (url) { + createWebSocket(url) { var Constructor = this.getWebSocketAPI(); return new Constructor(url); }, - createSocketRequest: function (method, url) { + createSocketRequest(method, url) { if (this.isXHRSupported()) { return this.HTTPFactory.createXHR(method, url); } @@ -4104,16 +3746,16 @@ var Runtime = { throw 'Cross-origin HTTP requests are not supported'; } }, - isXHRSupported: function () { + isXHRSupported() { var Constructor = this.getXHRAPI(); return (Boolean(Constructor) && new Constructor().withCredentials !== undefined); }, - isXDRSupported: function (useTLS) { + isXDRSupported(useTLS) { var protocol = useTLS ? 'https:' : 'http:'; var documentProtocol = this.getProtocol(); return (Boolean(window['XDomainRequest']) && documentProtocol === protocol); }, - addUnloadListener: function (listener) { + addUnloadListener(listener) { if (window.addEventListener !== undefined) { window.addEventListener('unload', listener, false); } @@ -4121,7 +3763,7 @@ var Runtime = { window.attachEvent('onunload', listener); } }, - removeUnloadListener: function (listener) { + removeUnloadListener(listener) { if (window.addEventListener !== undefined) { window.removeEventListener('unload', listener, false); } @@ -4129,10 +3771,10 @@ var Runtime = { window.detachEvent('onunload', listener); } }, - randomInt: function (max) { - var random = function () { - var crypto = window.crypto || window['msCrypto']; - var random = crypto.getRandomValues(new Uint32Array(1))[0]; + randomInt(max) { + const random = function () { + const crypto = window.crypto || window['msCrypto']; + const random = crypto.getRandomValues(new Uint32Array(1))[0]; return random / Math.pow(2, 32); }; return Math.floor(random() * max); @@ -4153,8 +3795,8 @@ var TimelineLevel; -var timeline_Timeline = (function () { - function Timeline(key, session, options) { +class timeline_Timeline { + constructor(key, session, options) { this.key = key; this.session = session; this.events = []; @@ -4162,28 +3804,27 @@ var timeline_Timeline = (function () { this.sent = 0; this.uniqueID = 0; } - Timeline.prototype.log = function (level, event) { + log(level, event) { if (level <= this.options.level) { this.events.push(extend({}, event, { timestamp: util.now() })); if (this.options.limit && this.events.length > this.options.limit) { this.events.shift(); } } - }; - Timeline.prototype.error = function (event) { + } + error(event) { this.log(timeline_level.ERROR, event); - }; - Timeline.prototype.info = function (event) { + } + info(event) { this.log(timeline_level.INFO, event); - }; - Timeline.prototype.debug = function (event) { + } + debug(event) { this.log(timeline_level.DEBUG, event); - }; - Timeline.prototype.isEmpty = function () { + } + isEmpty() { return this.events.length === 0; - }; - Timeline.prototype.send = function (sendfn, callback) { - var _this = this; + } + send(sendfn, callback) { var data = extend({ session: this.session, bundle: this.sent + 1, @@ -4195,43 +3836,40 @@ var timeline_Timeline = (function () { timeline: this.events }, this.options.params); this.events = []; - sendfn(data, function (error, result) { + sendfn(data, (error, result) => { if (!error) { - _this.sent++; + this.sent++; } if (callback) { callback(error, result); } }); return true; - }; - Timeline.prototype.generateUniqueID = function () { + } + generateUniqueID() { this.uniqueID++; return this.uniqueID; - }; - return Timeline; -}()); -/* harmony default export */ var timeline_timeline = (timeline_Timeline); + } +} // CONCATENATED MODULE: ./src/core/strategies/transport_strategy.ts -var transport_strategy_TransportStrategy = (function () { - function TransportStrategy(name, priority, transport, options) { +class transport_strategy_TransportStrategy { + constructor(name, priority, transport, options) { this.name = name; this.priority = priority; this.transport = transport; this.options = options || {}; } - TransportStrategy.prototype.isSupported = function () { + isSupported() { return this.transport.isSupported({ useTLS: this.options.useTLS }); - }; - TransportStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { if (!this.isSupported()) { return failAttempt(new UnsupportedStrategy(), callback); } @@ -4274,7 +3912,7 @@ var transport_strategy_TransportStrategy = (function () { transport.bind('closed', onClosed); transport.initialize(); return { - abort: function () { + abort: () => { if (connected) { return; } @@ -4286,11 +3924,11 @@ var transport_strategy_TransportStrategy = (function () { transport.close(); } }, - forceMinPriority: function (p) { + forceMinPriority: p => { if (connected) { return; } - if (_this.priority < p) { + if (this.priority < p) { if (handshake) { handshake.close(); } @@ -4300,10 +3938,8 @@ var transport_strategy_TransportStrategy = (function () { } } }; - }; - return TransportStrategy; -}()); -/* harmony default export */ var transport_strategy = (transport_strategy_TransportStrategy); + } +} function failAttempt(error, callback) { util.defer(function () { callback(error); @@ -4320,7 +3956,7 @@ function failAttempt(error, callback) { -var strategy_builder_Transports = runtime.Transports; +const { Transports: strategy_builder_Transports } = runtime; var strategy_builder_defineTransport = function (config, name, type, priority, options, manager) { var transportClass = strategy_builder_Transports[type]; if (!transportClass) { @@ -4333,7 +3969,7 @@ var strategy_builder_defineTransport = function (config, name, type, priority, o var transport; if (enabled) { options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options); - transport = new transport_strategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); + transport = new transport_strategy_TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); } else { transport = strategy_builder_UnsupportedStrategy; @@ -4374,7 +4010,7 @@ function validateOptions(options) { // CONCATENATED MODULE: ./src/core/auth/user_authenticator.ts -var composeChannelQuery = function (params, authOptions) { +const composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); for (var key in authOptions.params) { query += @@ -4384,7 +4020,7 @@ var composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -4395,12 +4031,12 @@ var composeChannelQuery = function (params, authOptions) { } return query; }; -var UserAuthenticator = function (authOptions) { +const UserAuthenticator = (authOptions) => { if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = composeChannelQuery(params, authOptions); runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.UserAuthentication, callback); }; }; @@ -4409,7 +4045,7 @@ var UserAuthenticator = function (authOptions) { // CONCATENATED MODULE: ./src/core/auth/channel_authorizer.ts -var channel_authorizer_composeChannelQuery = function (params, authOptions) { +const channel_authorizer_composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); query += '&channel_name=' + encodeURIComponent(params.channelName); for (var key in authOptions.params) { @@ -4420,7 +4056,7 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -4431,20 +4067,20 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { } return query; }; -var ChannelAuthorizer = function (authOptions) { +const ChannelAuthorizer = (authOptions) => { if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = channel_authorizer_composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = channel_authorizer_composeChannelQuery(params, authOptions); runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback); }; }; /* harmony default export */ var channel_authorizer = (ChannelAuthorizer); // CONCATENATED MODULE: ./src/core/auth/deprecated_channel_authorizer.ts -var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGenerator) { - var deprecatedAuthorizerOptions = { +const ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => { + const deprecatedAuthorizerOptions = { authTransport: authOptions.transport, authEndpoint: authOptions.endpoint, auth: { @@ -4452,32 +4088,21 @@ var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGen headers: authOptions.headers } }; - return function (params, callback) { - var channel = pusher.channel(params.channelName); - var channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); + return (params, callback) => { + const channel = pusher.channel(params.channelName); + const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); channelAuthorizer.authorize(params.socketId, callback); }; }; // CONCATENATED MODULE: ./src/core/config.ts -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; function getConfig(opts, pusher) { - var config = { + let config = { activityTimeout: opts.activityTimeout || defaults.activityTimeout, cluster: opts.cluster, httpPath: opts.httpPath || defaults.httpPath, @@ -4514,7 +4139,7 @@ function getHttpHost(opts) { return opts.httpHost; } if (opts.cluster) { - return "sockjs-" + opts.cluster + ".pusher.com"; + return `sockjs-${opts.cluster}.pusher.com`; } return defaults.httpHost; } @@ -4525,7 +4150,7 @@ function getWebsocketHost(opts) { return getWebsocketHostFromCluster(opts.cluster); } function getWebsocketHostFromCluster(cluster) { - return "ws-" + cluster + ".pusher.com"; + return `ws-${cluster}.pusher.com`; } function shouldUseTLS(opts) { if (runtime.getProtocol() === 'https:') { @@ -4546,7 +4171,7 @@ function getEnableStatsConfig(opts) { return false; } function buildUserAuthenticator(opts) { - var userAuthentication = __assign(__assign({}, defaults.userAuthentication), opts.userAuthentication); + const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication); if ('customHandler' in userAuthentication && userAuthentication['customHandler'] != null) { return userAuthentication['customHandler']; @@ -4554,9 +4179,9 @@ function buildUserAuthenticator(opts) { return user_authenticator(userAuthentication); } function buildChannelAuth(opts, pusher) { - var channelAuthorization; + let channelAuthorization; if ('channelAuthorization' in opts) { - channelAuthorization = __assign(__assign({}, defaults.channelAuthorization), opts.channelAuthorization); + channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization); } else { channelAuthorization = { @@ -4575,7 +4200,7 @@ function buildChannelAuth(opts, pusher) { return channelAuthorization; } function buildChannelAuthorizer(opts, pusher) { - var channelAuthorization = buildChannelAuth(opts, pusher); + const channelAuthorization = buildChannelAuth(opts, pusher); if ('customHandler' in channelAuthorization && channelAuthorization['customHandler'] != null) { return channelAuthorization['customHandler']; @@ -4584,134 +4209,99 @@ function buildChannelAuthorizer(opts, pusher) { } // CONCATENATED MODULE: ./src/core/watchlist.ts -var watchlist_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var watchlist_WatchlistFacade = (function (_super) { - watchlist_extends(WatchlistFacade, _super); - function WatchlistFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { - logger.debug("No callbacks on watchlist events for " + eventName); - }) || this; - _this.pusher = pusher; - _this.bindWatchlistInternalEvent(); - return _this; - } - WatchlistFacade.prototype.handleEvent = function (pusherEvent) { - var _this = this; - pusherEvent.data.events.forEach(function (watchlistEvent) { - _this.emit(watchlistEvent.name, watchlistEvent); +class watchlist_WatchlistFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { + logger.debug(`No callbacks on watchlist events for ${eventName}`); }); - }; - WatchlistFacade.prototype.bindWatchlistInternalEvent = function () { - var _this = this; - this.pusher.connection.bind('message', function (pusherEvent) { + this.pusher = pusher; + this.bindWatchlistInternalEvent(); + } + handleEvent(pusherEvent) { + pusherEvent.data.events.forEach(watchlistEvent => { + this.emit(watchlistEvent.name, watchlistEvent); + }); + } + bindWatchlistInternalEvent() { + this.pusher.connection.bind('message', pusherEvent => { var eventName = pusherEvent.event; if (eventName === 'pusher_internal:watchlist_events') { - _this.handleEvent(pusherEvent); + this.handleEvent(pusherEvent); } }); - }; - return WatchlistFacade; -}(dispatcher)); -/* harmony default export */ var watchlist = (watchlist_WatchlistFacade); + } +} // CONCATENATED MODULE: ./src/core/utils/flat_promise.ts function flatPromise() { - var resolve, reject; - var promise = new Promise(function (res, rej) { + let resolve, reject; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); - return { promise: promise, resolve: resolve, reject: reject }; + return { promise, resolve, reject }; } /* harmony default export */ var flat_promise = (flatPromise); // CONCATENATED MODULE: ./src/core/user.ts -var user_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var user_UserFacade = (function (_super) { - user_extends(UserFacade, _super); - function UserFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { +class user_UserFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { logger.debug('No callbacks on user for ' + eventName); - }) || this; - _this.signin_requested = false; - _this.user_data = null; - _this.serverToUserChannel = null; - _this.signinDonePromise = null; - _this._signinDoneResolve = null; - _this._onAuthorize = function (err, authData) { + }); + this.signin_requested = false; + this.user_data = null; + this.serverToUserChannel = null; + this.signinDonePromise = null; + this._signinDoneResolve = null; + this._onAuthorize = (err, authData) => { if (err) { - logger.warn("Error during signin: " + err); - _this._cleanup(); + logger.warn(`Error during signin: ${err}`); + this._cleanup(); return; } - _this.pusher.send_event('pusher:signin', { + this.pusher.send_event('pusher:signin', { auth: authData.auth, user_data: authData.user_data }); }; - _this.pusher = pusher; - _this.pusher.connection.bind('state_change', function (_a) { - var previous = _a.previous, current = _a.current; + this.pusher = pusher; + this.pusher.connection.bind('state_change', ({ previous, current }) => { if (previous !== 'connected' && current === 'connected') { - _this._signin(); + this._signin(); } if (previous === 'connected' && current !== 'connected') { - _this._cleanup(); - _this._newSigninPromiseIfNeeded(); + this._cleanup(); + this._newSigninPromiseIfNeeded(); } }); - _this.watchlist = new watchlist(pusher); - _this.pusher.connection.bind('message', function (event) { + this.watchlist = new watchlist_WatchlistFacade(pusher); + this.pusher.connection.bind('message', event => { var eventName = event.event; if (eventName === 'pusher:signin_success') { - _this._onSigninSuccess(event.data); + this._onSigninSuccess(event.data); } - if (_this.serverToUserChannel && - _this.serverToUserChannel.name === event.channel) { - _this.serverToUserChannel.handleEvent(event); + if (this.serverToUserChannel && + this.serverToUserChannel.name === event.channel) { + this.serverToUserChannel.handleEvent(event); } }); - return _this; } - UserFacade.prototype.signin = function () { + signin() { if (this.signin_requested) { return; } this.signin_requested = true; this._signin(); - }; - UserFacade.prototype._signin = function () { + } + _signin() { if (!this.signin_requested) { return; } @@ -4722,46 +4312,45 @@ var user_UserFacade = (function (_super) { this.pusher.config.userAuthenticator({ socketId: this.pusher.connection.socket_id }, this._onAuthorize); - }; - UserFacade.prototype._onSigninSuccess = function (data) { + } + _onSigninSuccess(data) { try { this.user_data = JSON.parse(data.user_data); } catch (e) { - logger.error("Failed parsing user data after signin: " + data.user_data); + logger.error(`Failed parsing user data after signin: ${data.user_data}`); this._cleanup(); return; } if (typeof this.user_data.id !== 'string' || this.user_data.id === '') { - logger.error("user_data doesn't contain an id. user_data: " + this.user_data); + logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`); this._cleanup(); return; } this._signinDoneResolve(); this._subscribeChannels(); - }; - UserFacade.prototype._subscribeChannels = function () { - var _this = this; - var ensure_subscribed = function (channel) { + } + _subscribeChannels() { + const ensure_subscribed = channel => { if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); } else if (!channel.subscriptionPending && - _this.pusher.connection.state === 'connected') { + this.pusher.connection.state === 'connected') { channel.subscribe(); } }; - this.serverToUserChannel = new channels_channel("#server-to-user-" + this.user_data.id, this.pusher); - this.serverToUserChannel.bind_global(function (eventName, data) { + this.serverToUserChannel = new channel_Channel(`#server-to-user-${this.user_data.id}`, this.pusher); + this.serverToUserChannel.bind_global((eventName, data) => { if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { return; } - _this.emit(eventName, data); + this.emit(eventName, data); }); ensure_subscribed(this.serverToUserChannel); - }; - UserFacade.prototype._cleanup = function () { + } + _cleanup() { this.user_data = null; if (this.serverToUserChannel) { this.serverToUserChannel.unbind_all(); @@ -4771,26 +4360,24 @@ var user_UserFacade = (function (_super) { if (this.signin_requested) { this._signinDoneResolve(); } - }; - UserFacade.prototype._newSigninPromiseIfNeeded = function () { + } + _newSigninPromiseIfNeeded() { if (!this.signin_requested) { return; } if (this.signinDonePromise && !this.signinDonePromise.done) { return; } - var _a = flat_promise(), promise = _a.promise, resolve = _a.resolve, _ = _a.reject; + const { promise, resolve, reject: _ } = flat_promise(); promise.done = false; - var setDone = function () { + const setDone = () => { promise.done = true; }; - promise.then(setDone)["catch"](setDone); + promise.then(setDone).catch(setDone); this.signinDonePromise = promise; this._signinDoneResolve = resolve; - }; - return UserFacade; -}(dispatcher)); -/* harmony default export */ var user = (user_UserFacade); + } +} // CONCATENATED MODULE: ./src/core/pusher.ts @@ -4806,19 +4393,29 @@ var user_UserFacade = (function (_super) { -var pusher_Pusher = (function () { - function Pusher(app_key, options) { - var _this = this; +class pusher_Pusher { + static ready() { + pusher_Pusher.isReady = true; + for (var i = 0, l = pusher_Pusher.instances.length; i < l; i++) { + pusher_Pusher.instances[i].connect(); + } + } + static getClientFeatures() { + return keys(filterObject({ ws: runtime.Transports.ws }, function (t) { + return t.isSupported({}); + })); + } + constructor(app_key, options) { checkAppKey(app_key); validateOptions(options); this.key = app_key; this.config = getConfig(options, this); this.channels = factory.createChannels(); - this.global_emitter = new dispatcher(); + this.global_emitter = new dispatcher_Dispatcher(); this.sessionID = runtime.randomInt(1000000000); - this.timeline = new timeline_timeline(this.key, this.sessionID, { + this.timeline = new timeline_Timeline(this.key, this.sessionID, { cluster: this.config.cluster, - features: Pusher.getClientFeatures(), + features: pusher_Pusher.getClientFeatures(), params: this.config.timelineParams || {}, limit: 50, level: timeline_level.INFO, @@ -4830,8 +4427,8 @@ var pusher_Pusher = (function () { path: '/timeline/v2/' + runtime.TimelineTransport.name }); } - var getStrategy = function (options) { - return runtime.getDefaultStrategy(_this.config, options, strategy_builder_defineTransport); + var getStrategy = (options) => { + return runtime.getDefaultStrategy(this.config, options, strategy_builder_defineTransport); }; this.connection = factory.createConnectionManager(this.key, { getStrategy: getStrategy, @@ -4841,106 +4438,95 @@ var pusher_Pusher = (function () { unavailableTimeout: this.config.unavailableTimeout, useTLS: Boolean(this.config.useTLS) }); - this.connection.bind('connected', function () { - _this.subscribeAll(); - if (_this.timelineSender) { - _this.timelineSender.send(_this.connection.isUsingTLS()); + this.connection.bind('connected', () => { + this.subscribeAll(); + if (this.timelineSender) { + this.timelineSender.send(this.connection.isUsingTLS()); } }); - this.connection.bind('message', function (event) { + this.connection.bind('message', event => { var eventName = event.event; var internal = eventName.indexOf('pusher_internal:') === 0; if (event.channel) { - var channel = _this.channel(event.channel); + var channel = this.channel(event.channel); if (channel) { channel.handleEvent(event); } } if (!internal) { - _this.global_emitter.emit(event.event, event.data); + this.global_emitter.emit(event.event, event.data); } }); - this.connection.bind('connecting', function () { - _this.channels.disconnect(); + this.connection.bind('connecting', () => { + this.channels.disconnect(); }); - this.connection.bind('disconnected', function () { - _this.channels.disconnect(); + this.connection.bind('disconnected', () => { + this.channels.disconnect(); }); - this.connection.bind('error', function (err) { + this.connection.bind('error', err => { logger.warn(err); }); - Pusher.instances.push(this); - this.timeline.info({ instances: Pusher.instances.length }); - this.user = new user(this); - if (Pusher.isReady) { + pusher_Pusher.instances.push(this); + this.timeline.info({ instances: pusher_Pusher.instances.length }); + this.user = new user_UserFacade(this); + if (pusher_Pusher.isReady) { this.connect(); } } - Pusher.ready = function () { - Pusher.isReady = true; - for (var i = 0, l = Pusher.instances.length; i < l; i++) { - Pusher.instances[i].connect(); - } - }; - Pusher.getClientFeatures = function () { - return keys(filterObject({ ws: runtime.Transports.ws }, function (t) { - return t.isSupported({}); - })); - }; - Pusher.prototype.channel = function (name) { + channel(name) { return this.channels.find(name); - }; - Pusher.prototype.allChannels = function () { + } + allChannels() { return this.channels.all(); - }; - Pusher.prototype.connect = function () { + } + connect() { this.connection.connect(); if (this.timelineSender) { if (!this.timelineSenderTimer) { var usingTLS = this.connection.isUsingTLS(); var timelineSender = this.timelineSender; - this.timelineSenderTimer = new PeriodicTimer(60000, function () { + this.timelineSenderTimer = new timers_PeriodicTimer(60000, function () { timelineSender.send(usingTLS); }); } } - }; - Pusher.prototype.disconnect = function () { + } + disconnect() { this.connection.disconnect(); if (this.timelineSenderTimer) { this.timelineSenderTimer.ensureAborted(); this.timelineSenderTimer = null; } - }; - Pusher.prototype.bind = function (event_name, callback, context) { + } + bind(event_name, callback, context) { this.global_emitter.bind(event_name, callback, context); return this; - }; - Pusher.prototype.unbind = function (event_name, callback, context) { + } + unbind(event_name, callback, context) { this.global_emitter.unbind(event_name, callback, context); return this; - }; - Pusher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_emitter.bind_global(callback); return this; - }; - Pusher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { this.global_emitter.unbind_global(callback); return this; - }; - Pusher.prototype.unbind_all = function (callback) { + } + unbind_all(callback) { this.global_emitter.unbind_all(); return this; - }; - Pusher.prototype.subscribeAll = function () { + } + subscribeAll() { var channelName; for (channelName in this.channels.channels) { if (this.channels.channels.hasOwnProperty(channelName)) { this.subscribe(channelName); } } - }; - Pusher.prototype.subscribe = function (channel_name) { + } + subscribe(channel_name) { var channel = this.channels.add(channel_name, this); if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); @@ -4950,8 +4536,8 @@ var pusher_Pusher = (function () { channel.subscribe(); } return channel; - }; - Pusher.prototype.unsubscribe = function (channel_name) { + } + unsubscribe(channel_name) { var channel = this.channels.find(channel_name); if (channel && channel.subscriptionPending) { channel.cancelSubscription(); @@ -4962,25 +4548,24 @@ var pusher_Pusher = (function () { channel.unsubscribe(); } } - }; - Pusher.prototype.send_event = function (event_name, data, channel) { + } + send_event(event_name, data, channel) { return this.connection.send_event(event_name, data, channel); - }; - Pusher.prototype.shouldUseTLS = function () { + } + shouldUseTLS() { return this.config.useTLS; - }; - Pusher.prototype.signin = function () { + } + signin() { this.user.signin(); - }; - Pusher.instances = []; - Pusher.isReady = false; - Pusher.logToConsole = false; - Pusher.Runtime = runtime; - Pusher.ScriptReceivers = runtime.ScriptReceivers; - Pusher.DependenciesReceivers = runtime.DependenciesReceivers; - Pusher.auth_callbacks = runtime.auth_callbacks; - return Pusher; -}()); + } +} +pusher_Pusher.instances = []; +pusher_Pusher.isReady = false; +pusher_Pusher.logToConsole = false; +pusher_Pusher.Runtime = runtime; +pusher_Pusher.ScriptReceivers = runtime.ScriptReceivers; +pusher_Pusher.DependenciesReceivers = runtime.DependenciesReceivers; +pusher_Pusher.auth_callbacks = runtime.auth_callbacks; /* harmony default export */ var core_pusher = __webpack_exports__["default"] = (pusher_Pusher); function checkAppKey(key) { if (key === null || key === undefined) { diff --git a/dist/web/pusher.js.map b/dist/web/pusher.js.map index 54c37bf6c..34fc03cf4 100644 --- a/dist/web/pusher.js.map +++ b/dist/web/pusher.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts"],"names":[],"mappings":"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","file":"pusher.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts"],"names":[],"mappings":"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","file":"pusher.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/web/pusher.min.js b/dist/web/pusher.min.js index 0d53f67d3..9b0e7f3d1 100644 --- a/dist/web/pusher.min.js +++ b/dist/web/pusher.min.js @@ -1,9 +1,9 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Pusher=e():t.Pusher=e()}(window,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){void 0===t&&(t="="),this._paddingCharacter=t}return t.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(8*t+5)/6|0},t.prototype.encode=function(t){for(var e="",n=0;n>>18&63),e+=this._encodeByte(r>>>12&63),e+=this._encodeByte(r>>>6&63),e+=this._encodeByte(r>>>0&63)}var o=t.length-n;if(o>0){r=t[n]<<16|(2===o?t[n+1]<<8:0);e+=this._encodeByte(r>>>18&63),e+=this._encodeByte(r>>>12&63),e+=2===o?this._encodeByte(r>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,r=new Uint8Array(this.maxDecodedLength(n)),o=0,i=0,s=0,c=0,a=0,u=0,h=0;i>>4,r[o++]=a<<4|u>>>2,r[o++]=u<<6|h,s|=256&c,s|=256&a,s|=256&u,s|=256&h;if(i>>4,s|=256&c,s|=256&a),i>>2,s|=256&u),i>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=i;var s=new i;e.encode=function(t){return s.encode(t)},e.decode=function(t){return s.decode(t)};var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(i);e.URLSafeCoder=c;var a=new c;e.encodeURLSafe=function(t){return a.encode(t)},e.decodeURLSafe=function(t){return a.decode(t)},e.encodedLength=function(t){return s.encodedLength(t)},e.maxDecodedLength=function(t){return s.maxDecodedLength(t)},e.decodedLength=function(t){return s.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="utf8: invalid source encoding";function o(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(o(t)),n=0,r=0;r>6,e[n++]=128|63&i):i<55296?(e[n++]=224|i>>12,e[n++]=128|i>>6&63,e[n++]=128|63&i):(r++,i=(1023&i)<<10,i|=1023&t.charCodeAt(r),i+=65536,e[n++]=240|i>>18,e[n++]=128|i>>12&63,e[n++]=128|i>>6&63,e[n++]=128|63&i)}return e},e.encodedLength=o,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(r);if(128!=(192&(s=t[++n])))throw new Error(r);o=(31&o)<<6|63&s,i=128}else if(o<240){if(n>=t.length-1)throw new Error(r);var s=t[++n],c=t[++n];if(128!=(192&s)||128!=(192&c))throw new Error(r);o=(15&o)<<12|(63&s)<<6|63&c,i=2048}else{if(!(o<248))throw new Error(r);if(n>=t.length-2)throw new Error(r);s=t[++n],c=t[++n];var a=t[++n];if(128!=(192&s)||128!=(192&c)||128!=(192&a))throw new Error(r);o=(15&o)<<18|(63&s)<<12|(63&c)<<6|63&a,i=65536}if(o=55296&&o<=57343)throw new Error(r);if(o>=65536){if(o>1114111)throw new Error(r);o-=65536,e.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}e.push(String.fromCharCode(o))}return e.join("")}},function(t,e,n){t.exports=n(3).default},function(t,e,n){"use strict";n.r(e);var r,o=function(){function t(t,e){this.lastId=0,this.prefix=t,this.name=e}return t.prototype.create=function(t){this.lastId++;var e=this.lastId,n=this.prefix+e,r=this.name+"["+e+"]",o=!1,i=function(){o||(t.apply(null,arguments),o=!0)};return this[e]=i,{number:e,id:n,name:r,callback:i}},t.prototype.remove=function(t){delete this[t.number]},t}(),i=new o("_pusher_script_","Pusher.ScriptReceivers"),s={VERSION:"8.0.2",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""},c=function(){function t(t){this.options=t,this.receivers=t.receivers||i,this.loading={}}return t.prototype.load=function(t,e,n){var r=this;if(r.loading[t]&&r.loading[t].length>0)r.loading[t].push(n);else{r.loading[t]=[n];var o=Ce.createScriptRequest(r.getPath(t,e)),i=r.receivers.create((function(e){if(r.receivers.remove(i),r.loading[t]){var n=r.loading[t];delete r.loading[t];for(var s=function(t){t||o.cleanup()},c=0;c>>6)+C(128|63&e):C(224|e>>>12&15)+C(128|e>>>6&63)+C(128|63&e)},x=function(t){return t.replace(/[^\x00-\x7F]/g,A)},L=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[P.charAt(n>>>18),P.charAt(n>>>12&63),e>=2?"=":P.charAt(n>>>6&63),e>=1?"=":P.charAt(63&n)].join("")},R=window.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,L)},j=function(){function t(t,e,n,r){var o=this;this.clear=e,this.timer=t((function(){o.timer&&(o.timer=r(o.timer))}),n)}return t.prototype.isRunning=function(){return null!==this.timer},t.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},t}(),I=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();function D(t){window.clearTimeout(t)}function N(t){window.clearInterval(t)}var H=function(t){function e(e,n){return t.call(this,setTimeout,D,e,(function(t){return n(),null}))||this}return I(e,t),e}(j),U=function(t){function e(e,n){return t.call(this,setInterval,N,e,(function(t){return n(),t}))||this}return I(e,t),e}(j),M={now:function(){return Date.now?Date.now():(new Date).valueOf()},defer:function(t){return new H(0,t)},method:function(t){for(var e=[],n=1;n0)for(r=0;r=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}},xt=At,Lt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Rt=function(t){function e(e,n){var r=t.call(this)||this;return r.id=e,r.transport=n,r.activityTimeout=n.activityTimeout,r.bindListeners(),r}return Lt(e,t),e.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},e.prototype.send=function(t){return this.transport.send(t)},e.prototype.send_event=function(t,e,n){var r={event:t,data:e};return n&&(r.channel=n),Z.debug("Event sent",r),this.send(xt.encodeMessage(r))},e.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},e.prototype.close=function(){this.transport.close()},e.prototype.bindListeners=function(){var t=this,e={message:function(e){var n;try{n=xt.decodeMessage(e)}catch(n){t.emit("error",{type:"MessageParseError",error:n,data:e.data})}if(void 0!==n){switch(Z.debug("Event recd",n),n.event){case"pusher:error":t.emit("error",{type:"PusherError",data:n.data});break;case"pusher:ping":t.emit("ping");break;case"pusher:pong":t.emit("pong")}t.emit("message",n)}},activity:function(){t.emit("activity")},error:function(e){t.emit("error",e)},closed:function(e){n(),e&&e.code&&t.handleCloseEvent(e),t.transport=null,t.emit("closed")}},n=function(){F(e,(function(e,n){t.transport.unbind(n,e)}))};F(e,(function(e,n){t.transport.bind(n,e)}))},e.prototype.handleCloseEvent=function(t){var e=xt.getCloseAction(t),n=xt.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})},e}(pt),jt=function(){function t(t,e){this.transport=t,this.callback=e,this.bindListeners()}return t.prototype.close=function(){this.unbindListeners(),this.transport.close()},t.prototype.bindListeners=function(){var t=this;this.onMessage=function(e){var n;t.unbindListeners();try{n=xt.processHandshake(e)}catch(e){return t.finish("error",{error:e}),void t.transport.close()}"connected"===n.action?t.finish("connected",{connection:new Rt(n.id,t.transport),activityTimeout:n.activityTimeout}):(t.finish(n.action,{error:n.error}),t.transport.close())},this.onClosed=function(e){t.unbindListeners();var n=xt.getCloseAction(e)||"backoff",r=xt.getCloseError(e);t.finish(n,{error:r})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},t.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},t.prototype.finish=function(t,e){this.callback(z({transport:this.transport,action:t},e))},t}(),It=function(){function t(t,e){this.timeline=t,this.options=e||{}}return t.prototype.send=function(t,e){this.timeline.isEmpty()||this.timeline.send(Ce.TimelineTransport.getAgent(this,t),e)},t}(),Dt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Nt=function(t){function e(e,n){var r=t.call(this,(function(t,n){Z.debug("No callbacks on "+e+" for "+t)}))||this;return r.name=e,r.pusher=n,r.subscribed=!1,r.subscriptionPending=!1,r.subscriptionCancelled=!1,r}return Dt(e,t),e.prototype.authorize=function(t,e){return e(null,{auth:""})},e.prototype.trigger=function(t,e){if(0!==t.indexOf("client-"))throw new d("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=p("triggeringClientEvents");Z.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)},e.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},e.prototype.handleEvent=function(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}},e.prototype.handleSubscriptionSucceededEvent=function(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)},e.prototype.handleSubscriptionCountEvent=function(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)},e.prototype.subscribe=function(){var t=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(function(e,n){e?(t.subscriptionPending=!1,Z.error(e.toString()),t.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:e.message},e instanceof S?{status:e.status}:{}))):t.pusher.send_event("pusher:subscribe",{auth:n.auth,channel_data:n.channel_data,channel:t.name})})))},e.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},e.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},e.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},e}(pt),Ht=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Ut=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ht(e,t),e.prototype.authorize=function(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)},e}(Nt),Mt=function(){function t(){this.reset()}return t.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},t.prototype.each=function(t){var e=this;F(this.members,(function(n,r){t(e.get(r))}))},t.prototype.setMyID=function(t){this.myID=t},t.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},t.prototype.addMember=function(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},t.prototype.removeMember=function(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e},t.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},t}(),zt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),qt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{a(r.next(t))}catch(t){i(t)}}function c(t){try{a(r.throw(t))}catch(t){i(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,c)}a((r=r.apply(t,e||[])).next())}))},Bt=function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new H(t||0,(function(){e.disconnectInternally(),e.connect()}))},e.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},e.prototype.setUnavailableTimer=function(){var t=this;this.unavailableTimer=new H(this.options.unavailableTimeout,(function(){t.updateState("unavailable")}))},e.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},e.prototype.sendActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new H(this.options.pongTimeout,(function(){t.timeline.error({pong_timed_out:t.options.pongTimeout}),t.retryIn(0)}))},e.prototype.resetActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new H(this.activityTimeout,(function(){t.sendActivityCheck()})))},e.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},e.prototype.buildConnectionCallbacks=function(t){var e=this;return z({},t,{message:function(t){e.resetActivityCheck(),e.emit("message",t)},ping:function(){e.send_event("pusher:pong",{})},activity:function(){e.resetActivityCheck()},error:function(t){e.emit("error",t)},closed:function(){e.abandonConnection(),e.shouldRetry()&&e.retryIn(1e3)}})},e.prototype.buildHandshakeCallbacks=function(t){var e=this;return z({},t,{connected:function(t){e.activityTimeout=Math.min(e.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),e.clearUnavailableTimer(),e.setConnection(t.connection),e.socket_id=e.connection.id,e.updateState("connected",{socket_id:e.socket_id})}})},e.prototype.buildErrorCallbacks=function(){var t=this,e=function(e){return function(n){n.error&&t.emit("error",{type:"WebSocketError",error:n.error}),e(n)}};return{tls_only:e((function(){t.usingTLS=!0,t.updateStrategy(),t.retryIn(0)})),refused:e((function(){t.disconnect()})),backoff:e((function(){t.retryIn(1e3)})),retry:e((function(){t.retryIn(0)}))}},e.prototype.setConnection=function(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()},e.prototype.abandonConnection=function(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}},e.prototype.updateState=function(t,e){var n=this.state;if(this.state=t,n!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+e.socket_id),Z.debug("State changed",n+" -> "+r),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}},e.prototype.shouldRetry=function(){return"connecting"===this.state||"connected"===this.state},e}(pt),$t=function(){function t(){this.channels={}}return t.prototype.add=function(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return Qt.createEncryptedChannel(t,e,e.config.nacl);var n=p("encryptedChannelSupport");throw new m("Tried to subscribe to a private-encrypted- channel but no nacl implementation available. "+n)}if(0===t.indexOf("private-"))return Qt.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return Qt.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new y('Cannot create a channel with name "'+t+'".');return Qt.createChannel(t,e)}(t,e)),this.channels[t]},t.prototype.all=function(){return function(t){var e=[];return F(t,(function(t){e.push(t)})),e}(this.channels)},t.prototype.find=function(t){return this.channels[t]},t.prototype.remove=function(t){var e=this.channels[t];return delete this.channels[t],e},t.prototype.disconnect=function(){F(this.channels,(function(t){t.disconnect()}))},t}();var Qt={createChannels:function(){return new $t},createConnectionManager:function(t,e){return new Yt(t,e)},createChannel:function(t,e){return new Nt(t,e)},createPrivateChannel:function(t,e){return new Ut(t,e)},createPresenceChannel:function(t,e){return new Ft(t,e)},createEncryptedChannel:function(t,e,n){return new Gt(t,e,n)},createTimelineSender:function(t,e){return new It(t,e)},createHandshake:function(t,e){return new jt(t,e)},createAssistantToTheTransportManager:function(t,e,n){return new Et(t,e,n)}},Kt=function(){function t(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return t.prototype.getAssistant=function(t){return Qt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},t.prototype.isAlive=function(){return this.livesLeft>0},t.prototype.reportDeath=function(){this.livesLeft-=1},t}(),Zt=function(){function t(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}return t.prototype.isSupported=function(){return Y(this.strategies,M.method("isSupported"))},t.prototype.connect=function(t,e){var n=this,r=this.strategies,o=0,i=this.timeout,s=null,c=function(a,u){u?e(null,u):(o+=1,n.loop&&(o%=r.length),o0&&(o=new H(n.timeout,(function(){i.abort(),r(!0)}))),i=t.connect(e,(function(t,e){t&&o&&o.isRunning()&&!n.failFast||(o&&o.ensureAborted(),r(t,e))})),{abort:function(){o&&o.ensureAborted(),i.abort()},forceMinPriority:function(t){i.forceMinPriority(t)}}},t}(),te=function(){function t(t){this.strategies=t}return t.prototype.isSupported=function(){return Y(this.strategies,M.method("isSupported"))},t.prototype.connect=function(t,e){return function(t,e,n){var r=W(t,(function(t,r,o,i){return t.connect(e,n(r,i))}));return{abort:function(){J(r,ee)},forceMinPriority:function(t){J(r,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(r,o){n[t].error=r,r?function(t){return function(t,e){for(var n=0;n=M.now()){var i=this.transports[r.transport];i&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),o.push(new Zt([i],{timeout:2*r.latency+1e3,failFast:!0})))}var s=M.now(),c=o.pop().connect(t,(function r(i,a){i?(oe(n),o.length>0?(s=M.now(),c=o.pop().connect(t,r)):e(i)):(!function(t,e,n){var r=Ce.getLocalStorage();if(r)try{r[re(t)]=K({timestamp:M.now(),transport:e,latency:n})}catch(t){}}(n,a.transport.name,M.now()-s),e(null,a))}));return{abort:function(){c.abort()},forceMinPriority:function(e){t=e,c&&c.forceMinPriority(e)}}},t}();function re(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function oe(t){var e=Ce.getLocalStorage();if(e)try{delete e[re(t)]}catch(t){}}var ie=function(){function t(t,e){var n=e.delay;this.strategy=t,this.options={delay:n}}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,e){var n,r=this.strategy,o=new H(this.options.delay,(function(){n=r.connect(t,e)}));return{abort:function(){o.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}},t}(),se=function(){function t(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}return t.prototype.isSupported=function(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()},t.prototype.connect=function(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)},t}(),ce=function(){function t(t){this.strategy=t}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,e){var n=this.strategy.connect(t,(function(t,r){r&&n.abort(),e(t,r)}));return n},t}();function ae(t){return function(){return t.isSupported()}}var ue,he=function(t,e,n){var r={};function o(e,o,i,s,c){var a=n(t,e,o,i,s,c);return r[e]=a,a}var i,s=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),c=Object.assign({},s,{useTLS:!0}),a=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),u={loop:!0,timeout:15e3,timeoutLimit:6e4},h=new Kt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),p=new Kt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=o("ws","ws",3,s,h),f=o("wss","ws",3,c,h),d=o("sockjs","sockjs",1,a),y=o("xhr_streaming","xhr_streaming",1,a,p),v=o("xdr_streaming","xdr_streaming",1,a,p),g=o("xhr_polling","xhr_polling",1,a),b=o("xdr_polling","xdr_polling",1,a),m=new Zt([l],u),_=new Zt([f],u),w=new Zt([d],u),S=new Zt([new se(ae(y),y,v)],u),k=new Zt([new se(ae(g),g,b)],u),C=new Zt([new se(ae(S),new te([S,new ie(k,{delay:4e3})]),k)],u),P=new se(ae(C),C,w);return i=e.useTLS?new te([m,new ie(P,{delay:2e3})]):new te([m,new ie(_,{delay:2e3}),new ie(P,{delay:5e3})]),new ne(new ce(new se(ae(l),i,P)),r,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})},pe={getRequest:function(t){var e=new window.XDomainRequest;return e.ontimeout=function(){t.emit("error",new v),t.close()},e.onerror=function(e){t.emit("error",e),t.close()},e.onprogress=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText)},e.onload=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText),t.emit("finished",200),t.close()},e},abortRequest:function(t){t.ontimeout=t.onerror=t.onprogress=t.onload=null,t.abort()}},le=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),fe=function(t){function e(e,n,r){var o=t.call(this)||this;return o.hooks=e,o.method=n,o.url=r,o}return le(e,t),e.prototype.start=function(t){var e=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){e.close()},Ce.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)},e.prototype.close=function(){this.unloader&&(Ce.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},e.prototype.onChunk=function(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")},e.prototype.advanceBuffer=function(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null},e.prototype.isBufferTooLong=function(t){return this.position===t.length&&t.length>262144},e}(pt);!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(ue||(ue={}));var de=ue,ye=1;function ve(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+ye++}function ge(t){return Ce.randomInt(t)}var be,me=function(){function t(t,e){this.hooks=t,this.session=ge(1e3)+"/"+function(t){for(var e=[],n=0;n0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},ke={createStreamingSocket:function(t){return this.createSocket(_e,t)},createPollingSocket:function(t){return this.createSocket(we,t)},createSocket:function(t,e){return new me(t,e)},createXHR:function(t,e){return this.createRequest(Se,t,e)},createRequest:function(t,e,n){return new fe(t,e,n)},createXDR:function(t,e){return this.createRequest(pe,t,e)}},Ce={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:i,DependenciesReceivers:a,getDefaultStrategy:he,Transports:Pt,transportConnectionInitializer:function(){var t=this;t.timeline.info(t.buildTimelineMessage({transport:t.name+(t.options.useTLS?"s":"")})),t.hooks.isInitialized()?t.changeState("initialized"):t.hooks.file?(t.changeState("initializing"),u.load(t.hooks.file,{useTLS:t.options.useTLS},(function(e,n){t.hooks.isInitialized()?(t.changeState("initialized"),n(!0)):(e&&t.onError(e),t.onClose(),n(!1))}))):t.onClose()},HTTPFactory:ke,TimelineTransport:rt,getXHRAPI:function(){return window.XMLHttpRequest},getWebSocketAPI:function(){return window.WebSocket||window.MozWebSocket},setup:function(t){var e=this;window.Pusher=t;var n=function(){e.onDocumentBody(t.ready)};window.JSON?n():u.load("json2",{},n)},getDocument:function(){return document},getProtocol:function(){return this.getDocument().location.protocol},getAuthorizers:function(){return{ajax:k,jsonp:tt}},onDocumentBody:function(t){var e=this;document.body?t():setTimeout((function(){e.onDocumentBody(t)}),0)},createJSONPRequest:function(t,e){return new nt(t,e)},createScriptRequest:function(t){return new et(t)},getLocalStorage:function(){try{return window.localStorage}catch(t){return}},createXHR:function(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest:function(){return new(this.getXHRAPI())},createMicrosoftXHR:function(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork:function(){return Ot},createWebSocket:function(t){return new(this.getWebSocketAPI())(t)},createSocketRequest:function(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);if(this.isXDRSupported(0===e.indexOf("https:")))return this.HTTPFactory.createXDR(t,e);throw"Cross-origin HTTP requests are not supported"},isXHRSupported:function(){var t=this.getXHRAPI();return Boolean(t)&&void 0!==(new t).withCredentials},isXDRSupported:function(t){var e=t?"https:":"http:",n=this.getProtocol();return Boolean(window.XDomainRequest)&&n===e},addUnloadListener:function(t){void 0!==window.addEventListener?window.addEventListener("unload",t,!1):void 0!==window.attachEvent&&window.attachEvent("onunload",t)},removeUnloadListener:function(t){void 0!==window.addEventListener?window.removeEventListener("unload",t,!1):void 0!==window.detachEvent&&window.detachEvent("onunload",t)},randomInt:function(t){return Math.floor((window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)}};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(be||(be={}));var Pe=be,Te=function(){function t(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}return t.prototype.log=function(t,e){t<=this.options.level&&(this.events.push(z({},e,{timestamp:M.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},t.prototype.error=function(t){this.log(Pe.ERROR,t)},t.prototype.info=function(t){this.log(Pe.INFO,t)},t.prototype.debug=function(t){this.log(Pe.DEBUG,t)},t.prototype.isEmpty=function(){return 0===this.events.length},t.prototype.send=function(t,e){var n=this,r=z({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(r,(function(t,r){t||n.sent++,e&&e(t,r)})),!0},t.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},t}(),Oe=function(){function t(t,e,n,r){this.name=t,this.priority=e,this.transport=n,this.options=r||{}}return t.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},t.prototype.connect=function(t,e){var n=this;if(!this.isSupported())return Ee(new w,e);if(this.priority>>18&63),e+=this._encodeByte(i>>>12&63),e+=this._encodeByte(i>>>6&63),e+=this._encodeByte(i>>>0&63)}var r=t.length-n;if(r>0){i=t[n]<<16|(2===r?t[n+1]<<8:0);e+=this._encodeByte(i>>>18&63),e+=this._encodeByte(i>>>12&63),e+=2===r?this._encodeByte(i>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,i=new Uint8Array(this.maxDecodedLength(n)),r=0,s=0,o=0,a=0,c=0,h=0,u=0;s>>4,i[r++]=c<<4|h>>>2,i[r++]=h<<6|u,o|=256&a,o|=256&c,o|=256&h,o|=256&u;if(s>>4,o|=256&a,o|=256&c),s>>2,o|=256&h),s>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=s;var o=new s;e.encode=function(t){return o.encode(t)},e.decode=function(t){return o.decode(t)};var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(s);e.URLSafeCoder=a;var c=new a;e.encodeURLSafe=function(t){return c.encode(t)},e.decodeURLSafe=function(t){return c.decode(t)},e.encodedLength=function(t){return o.encodedLength(t)},e.maxDecodedLength=function(t){return o.maxDecodedLength(t)},e.decodedLength=function(t){return o.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="utf8: invalid source encoding";function r(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(r(t)),n=0,i=0;i>6,e[n++]=128|63&s):s<55296?(e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s):(i++,s=(1023&s)<<10,s|=1023&t.charCodeAt(i),s+=65536,e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s)}return e},e.encodedLength=r,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(i);if(128!=(192&(o=t[++n])))throw new Error(i);r=(31&r)<<6|63&o,s=128}else if(r<240){if(n>=t.length-1)throw new Error(i);var o=t[++n],a=t[++n];if(128!=(192&o)||128!=(192&a))throw new Error(i);r=(15&r)<<12|(63&o)<<6|63&a,s=2048}else{if(!(r<248))throw new Error(i);if(n>=t.length-2)throw new Error(i);o=t[++n],a=t[++n];var c=t[++n];if(128!=(192&o)||128!=(192&a)||128!=(192&c))throw new Error(i);r=(15&r)<<18|(63&o)<<12|(63&a)<<6|63&c,s=65536}if(r=55296&&r<=57343)throw new Error(i);if(r>=65536){if(r>1114111)throw new Error(i);r-=65536,e.push(String.fromCharCode(55296|r>>10)),r=56320|1023&r}}e.push(String.fromCharCode(r))}return e.join("")}},function(t,e,n){t.exports=n(3).default},function(t,e,n){"use strict";n.r(e);class i{constructor(t,e){this.lastId=0,this.prefix=t,this.name=e}create(t){this.lastId++;var e=this.lastId,n=this.prefix+e,i=this.name+"["+e+"]",r=!1,s=function(){r||(t.apply(null,arguments),r=!0)};return this[e]=s,{number:e,id:n,name:i,callback:s}}remove(t){delete this[t.number]}}var r=new i("_pusher_script_","Pusher.ScriptReceivers"),s={VERSION:"8.1.0",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""};var o=new i("_pusher_dependencies","Pusher.DependenciesReceivers"),a=new class{constructor(t){this.options=t,this.receivers=t.receivers||r,this.loading={}}load(t,e,n){var i=this;if(i.loading[t]&&i.loading[t].length>0)i.loading[t].push(n);else{i.loading[t]=[n];var r=ue.createScriptRequest(i.getPath(t,e)),s=i.receivers.create((function(e){if(i.receivers.remove(s),i.loading[t]){var n=i.loading[t];delete i.loading[t];for(var o=function(t){t||r.cleanup()},a=0;a>>6)+S(128|63&e):S(224|e>>>12&15)+S(128|e>>>6&63)+S(128|63&e)},E=function(t){return t.replace(/[^\x00-\x7F]/g,P)},O=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[_.charAt(n>>>18),_.charAt(n>>>12&63),e>=2?"=":_.charAt(n>>>6&63),e>=1?"=":_.charAt(63&n)].join("")},x=window.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,O)};var L=class{constructor(t,e,n,i){this.clear=e,this.timer=t(()=>{this.timer&&(this.timer=i(this.timer))},n)}isRunning(){return null!==this.timer}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}};function A(t){window.clearTimeout(t)}function R(t){window.clearInterval(t)}class I extends L{constructor(t,e){super(setTimeout,A,t,(function(t){return e(),null}))}}class D extends L{constructor(t,e){super(setInterval,R,t,(function(t){return e(),t}))}}var j={now:()=>Date.now?Date.now():(new Date).valueOf(),defer:t=>new I(0,t),method(t,...e){var n=Array.prototype.slice.call(arguments,1);return function(e){return e[t].apply(e,n.concat(arguments))}}};function N(t,...e){for(var n=0;n{window.console&&window.console.log&&window.console.log(t)}}debug(...t){this.log(this.globalLog,t)}warn(...t){this.log(this.globalLogWarn,t)}error(...t){this.log(this.globalLogError,t)}globalLogWarn(t){window.console&&window.console.warn?window.console.warn(t):this.globalLog(t)}globalLogError(t){window.console&&window.console.error?window.console.error(t):this.globalLogWarn(t)}log(t,...e){var n=H.apply(this,arguments);if(Le.log)Le.log(n);else if(Le.logToConsole){t.bind(this)(n)}}},Y=function(t,e,n,i,r){void 0===n.headers&&null==n.headersProvider||V.warn(`To send headers with the ${i.toString()} request, you must use AJAX, rather than JSONP.`);var s=t.nextAuthCallbackID.toString();t.nextAuthCallbackID++;var o=t.getDocument(),a=o.createElement("script");t.auth_callbacks[s]=function(t){r(null,t)};var c="Pusher.auth_callbacks['"+s+"']";a.src=n.endpoint+"?callback="+encodeURIComponent(c)+"&"+e;var h=o.getElementsByTagName("head")[0]||o.documentElement;h.insertBefore(a,h.firstChild)};class Q{constructor(t){this.src=t}send(t){var e=this,n="Error loading "+e.src;e.script=document.createElement("script"),e.script.id=t.id,e.script.src=e.src,e.script.type="text/javascript",e.script.charset="UTF-8",e.script.addEventListener?(e.script.onerror=function(){t.callback(n)},e.script.onload=function(){t.callback(null)}):e.script.onreadystatechange=function(){"loaded"!==e.script.readyState&&"complete"!==e.script.readyState||t.callback(null)},void 0===e.script.async&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(e.errorScript=document.createElement("script"),e.errorScript.id=t.id+"_error",e.errorScript.text=t.name+"('"+n+"');",e.script.async=e.errorScript.async=!1):e.script.async=!0;var i=document.getElementsByTagName("head")[0];i.insertBefore(e.script,i.firstChild),e.errorScript&&i.insertBefore(e.errorScript,e.script.nextSibling)}cleanup(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null}}class K{constructor(t,e){this.url=t,this.data=e}send(t){if(!this.request){var e=W(this.data),n=this.url+"/"+t.number+"?"+e;this.request=ue.createScriptRequest(n),this.request.send(t)}}cleanup(){this.request&&this.request.cleanup()}}var Z={name:"jsonp",getAgent:function(t,e){return function(n,i){var s="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path,o=ue.createJSONPRequest(s,n),a=ue.ScriptReceivers.create((function(e,n){r.remove(a),o.cleanup(),n&&n.host&&(t.host=n.host),i&&i(e,n)}));o.send(a)}}};function tt(t,e,n){return t+(e.useTLS?"s":"")+"://"+(e.useTLS?e.hostTLS:e.hostNonTLS)+n}function et(t,e){return"/app/"+t+("?protocol="+s.PROTOCOL+"&client=js&version="+s.VERSION+(e?"&"+e:""))}var nt={getInitial:function(t,e){return tt("ws",e,(e.httpPath||"")+et(t,"flash=false"))}},it={getInitial:function(t,e){return tt("http",e,(e.httpPath||"/pusher")+et(t))}},rt={getInitial:function(t,e){return tt("http",e,e.httpPath||"/pusher")},getPath:function(t,e){return et(t)}};class st{constructor(){this._callbacks={}}get(t){return this._callbacks[ot(t)]}add(t,e,n){var i=ot(t);this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push({fn:e,context:n})}remove(t,e,n){if(t||e||n){var i=t?[ot(t)]:z(this._callbacks);e||n?this.removeCallback(i,e,n):this.removeAllCallbacks(i)}else this._callbacks={}}removeCallback(t,e,n){q(t,(function(t){this._callbacks[t]=F(this._callbacks[t]||[],(function(t){return e&&e!==t.fn||n&&n!==t.context})),0===this._callbacks[t].length&&delete this._callbacks[t]}),this)}removeAllCallbacks(t){q(t,(function(t){delete this._callbacks[t]}),this)}}function ot(t){return"_"+t}class at{constructor(t){this.callbacks=new st,this.global_callbacks=[],this.failThrough=t}bind(t,e,n){return this.callbacks.add(t,e,n),this}bind_global(t){return this.global_callbacks.push(t),this}unbind(t,e,n){return this.callbacks.remove(t,e,n),this}unbind_global(t){return t?(this.global_callbacks=F(this.global_callbacks||[],e=>e!==t),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(t,e,n){for(var i=0;i0)for(i=0;i{this.onError(t),this.changeState("closed")}),!1}return this.bindListeners(),V.debug("Connecting",{transport:this.name,url:t}),this.changeState("connecting"),!0}close(){return!!this.socket&&(this.socket.close(),!0)}send(t){return"open"===this.state&&(j.defer(()=>{this.socket&&this.socket.send(t)}),!0)}ping(){"open"===this.state&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(t){this.emit("error",{type:"WebSocketError",error:t}),this.timeline.error(this.buildTimelineMessage({error:t.toString()}))}onClose(t){t?this.changeState("closed",{code:t.code,reason:t.reason,wasClean:t.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(t){this.emit("message",t)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=t=>{this.onError(t)},this.socket.onclose=t=>{this.onClose(t)},this.socket.onmessage=t=>{this.onMessage(t)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(t,e){this.state=t,this.timeline.info(this.buildTimelineMessage({state:t,params:e})),this.emit(t,e)}buildTimelineMessage(t){return N({cid:this.id},t)}}class ht{constructor(t){this.hooks=t}isSupported(t){return this.hooks.isSupported(t)}createConnection(t,e,n,i){return new ct(this.hooks,t,e,n,i)}}var ut=new ht({urls:nt,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return Boolean(ue.getWebSocketAPI())},isSupported:function(){return Boolean(ue.getWebSocketAPI())},getSocket:function(t){return ue.createWebSocket(t)}}),lt={urls:it,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},dt=N({getSocket:function(t){return ue.HTTPFactory.createStreamingSocket(t)}},lt),pt=N({getSocket:function(t){return ue.HTTPFactory.createPollingSocket(t)}},lt),ft={isSupported:function(){return ue.isXHRSupported()}},gt={ws:ut,xhr_streaming:new ht(N({},dt,ft)),xhr_polling:new ht(N({},pt,ft))},vt=new ht({file:"sockjs",urls:rt,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return void 0!==window.SockJS},getSocket:function(t,e){return new window.SockJS(t,null,{js_path:a.getPath("sockjs",{useTLS:e.useTLS}),ignore_null_origin:e.ignoreNullOrigin})},beforeOpen:function(t,e){t.send(JSON.stringify({path:e}))}}),mt={isSupported:function(t){return ue.isXDRSupported(t.useTLS)}},bt=new ht(N({},dt,mt)),yt=new ht(N({},pt,mt));gt.xdr_streaming=bt,gt.xdr_polling=yt,gt.sockjs=vt;var wt=gt;var St=new class extends at{constructor(){super();var t=this;void 0!==window.addEventListener&&(window.addEventListener("online",(function(){t.emit("online")}),!1),window.addEventListener("offline",(function(){t.emit("offline")}),!1))}isOnline(){return void 0===window.navigator.onLine||window.navigator.onLine}};class _t{constructor(t,e,n){this.manager=t,this.transport=e,this.minPingDelay=n.minPingDelay,this.maxPingDelay=n.maxPingDelay,this.pingDelay=void 0}createConnection(t,e,n,i){i=N({},i,{activityTimeout:this.pingDelay});var r=this.transport.createConnection(t,e,n,i),s=null,o=function(){r.unbind("open",o),r.bind("closed",a),s=j.now()},a=t=>{if(r.unbind("closed",a),1002===t.code||1003===t.code)this.manager.reportDeath();else if(!t.wasClean&&s){var e=j.now()-s;e<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(e/2,this.minPingDelay))}};return r.bind("open",o),r}isSupported(t){return this.manager.isAlive()&&this.transport.isSupported(t)}}const kt={decodeMessage:function(t){try{var e=JSON.parse(t.data),n=e.data;if("string"==typeof n)try{n=JSON.parse(e.data)}catch(t){}var i={event:e.event,channel:e.channel,data:n};return e.user_id&&(i.user_id=e.user_id),i}catch(e){throw{type:"MessageParseError",error:e,data:t.data}}},encodeMessage:function(t){return JSON.stringify(t)},processHandshake:function(t){var e=kt.decodeMessage(t);if("pusher:connection_established"===e.event){if(!e.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:e.data.socket_id,activityTimeout:1e3*e.data.activity_timeout}}if("pusher:error"===e.event)return{action:this.getCloseAction(e.data),error:this.getCloseError(e.data)};throw"Invalid handshake"},getCloseAction:function(t){return t.code<4e3?t.code>=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}};var Ct=kt;class Tt extends at{constructor(t,e){super(),this.id=t,this.transport=e,this.activityTimeout=e.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(t){return this.transport.send(t)}send_event(t,e,n){var i={event:t,data:e};return n&&(i.channel=n),V.debug("Event sent",i),this.send(Ct.encodeMessage(i))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var t={message:t=>{var e;try{e=Ct.decodeMessage(t)}catch(e){this.emit("error",{type:"MessageParseError",error:e,data:t.data})}if(void 0!==e){switch(V.debug("Event recd",e),e.event){case"pusher:error":this.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong")}this.emit("message",e)}},activity:()=>{this.emit("activity")},error:t=>{this.emit("error",t)},closed:t=>{e(),t&&t.code&&this.handleCloseEvent(t),this.transport=null,this.emit("closed")}},e=()=>{M(t,(t,e)=>{this.transport.unbind(e,t)})};M(t,(t,e)=>{this.transport.bind(e,t)})}handleCloseEvent(t){var e=Ct.getCloseAction(t),n=Ct.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})}}class Pt{constructor(t,e){this.transport=t,this.callback=e,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=t=>{var e;this.unbindListeners();try{e=Ct.processHandshake(t)}catch(t){return this.finish("error",{error:t}),void this.transport.close()}"connected"===e.action?this.finish("connected",{connection:new Tt(e.id,this.transport),activityTimeout:e.activityTimeout}):(this.finish(e.action,{error:e.error}),this.transport.close())},this.onClosed=t=>{this.unbindListeners();var e=Ct.getCloseAction(t)||"backoff",n=Ct.getCloseError(t);this.finish(e,{error:n})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(t,e){this.callback(N({transport:this.transport,action:t},e))}}class Et{constructor(t,e){this.timeline=t,this.options=e||{}}send(t,e){this.timeline.isEmpty()||this.timeline.send(ue.TimelineTransport.getAgent(this,t),e)}}class Ot extends at{constructor(t,e){super((function(e,n){V.debug("No callbacks on "+t+" for "+e)})),this.name=t,this.pusher=e,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(t,e){return e(null,{auth:""})}trigger(t,e){if(0!==t.indexOf("client-"))throw new l("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=u("triggeringClientEvents");V.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)}handleSubscriptionCountEvent(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(t,e)=>{t?(this.subscriptionPending=!1,V.error(t.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:t.message},t instanceof y?{status:t.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class xt extends Ot{authorize(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)}}class Lt{constructor(){this.reset()}get(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null}each(t){M(this.members,(e,n)=>{t(this.get(n))})}setMyID(t){this.myID=t}onSubscription(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)}addMember(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)}removeMember(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var At=function(t,e,n,i){return new(n||(n=Promise))((function(r,s){function o(t){try{c(i.next(t))}catch(t){s(t)}}function a(t){try{c(i.throw(t))}catch(t){s(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}c((i=i.apply(t,e||[])).next())}))};class Rt extends xt{constructor(t,e){super(t,e),this.members=new Lt}authorize(t,e){super.authorize(t,(t,n)=>At(this,void 0,void 0,(function*(){if(!t)if(null!=(n=n).channel_data){var i=JSON.parse(n.channel_data);this.members.setMyID(i.user_id)}else{if(yield this.pusher.user.signinDonePromise,null==this.pusher.user.user_data){let t=u("authorizationEndpoint");return V.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${t}, or the user should be signed in.`),void e("Invalid auth response")}this.members.setMyID(this.pusher.user.user_data.id)}e(t,n)})))}handleEvent(t){var e=t.event;if(0===e.indexOf("pusher_internal:"))this.handleInternalEvent(t);else{var n=t.data,i={};t.user_id&&(i.user_id=t.user_id),this.emit(e,n,i)}}handleInternalEvent(t){var e=t.event,n=t.data;switch(e){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(t);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(t);break;case"pusher_internal:member_added":var i=this.members.addMember(n);this.emit("pusher:member_added",i);break;case"pusher_internal:member_removed":var r=this.members.removeMember(n);r&&this.emit("pusher:member_removed",r)}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(t.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var It=n(1),Dt=n(0);class jt extends xt{constructor(t,e,n){super(t,e),this.key=null,this.nacl=n}authorize(t,e){super.authorize(t,(t,n)=>{if(t)return void e(t,n);let i=n.shared_secret;i?(this.key=Object(Dt.decode)(i),delete n.shared_secret,e(null,n)):e(new Error("No shared_secret key in auth payload for encrypted channel: "+this.name),null)})}trigger(t,e){throw new v("Client events are not currently supported for encrypted channels")}handleEvent(t){var e=t.event,n=t.data;0!==e.indexOf("pusher_internal:")&&0!==e.indexOf("pusher:")?this.handleEncryptedEvent(e,n):super.handleEvent(t)}handleEncryptedEvent(t,e){if(!this.key)return void V.debug("Received encrypted event before key has been retrieved from the authEndpoint");if(!e.ciphertext||!e.nonce)return void V.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+e);let n=Object(Dt.decode)(e.ciphertext);if(n.length{e?V.error(`Failed to make a request to the authEndpoint: ${s}. Unable to fetch new key, so dropping encrypted event`):(r=this.nacl.secretbox.open(n,i,this.key),null!==r?this.emit(t,this.getDataToEmit(r)):V.error("Failed to decrypt event with new key. Dropping encrypted event"))});this.emit(t,this.getDataToEmit(r))}getDataToEmit(t){let e=Object(It.decode)(t);try{return JSON.parse(e)}catch(t){return e}}}class Nt extends at{constructor(t,e){super(),this.state="initialized",this.connection=null,this.key=t,this.options=e,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var n=ue.getNetwork();n.bind("online",()=>{this.timeline.info({netinfo:"online"}),"connecting"!==this.state&&"unavailable"!==this.state||this.retryIn(0)}),n.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){this.connection||this.runner||(this.strategy.isSupported()?(this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()):this.updateState("failed"))}send(t){return!!this.connection&&this.connection.send(t)}send_event(t,e,n){return!!this.connection&&this.connection.send_event(t,e,n)}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var t=(e,n)=>{e?this.runner=this.strategy.connect(0,t):"error"===n.action?(this.emit("error",{type:"HandshakeError",error:n.error}),this.timeline.error({handshakeError:n.error})):(this.abortConnecting(),this.handshakeCallbacks[n.action](n))};this.runner=this.strategy.connect(0,t)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection)&&this.abandonConnection().close()}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(t){this.timeline.info({action:"retry",delay:t}),t>0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new I(t||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new I(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new I(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new I(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(t){return N({},t,{message:t=>{this.resetActivityCheck(),this.emit("message",t)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:t=>{this.emit("error",t)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(t){return N({},t,{connected:t=>{this.activityTimeout=Math.min(this.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(t.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let t=t=>e=>{e.error&&this.emit("error",{type:"WebSocketError",error:e.error}),t(e)};return{tls_only:t(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:t(()=>{this.disconnect()}),backoff:t(()=>{this.retryIn(1e3)}),retry:t(()=>{this.retryIn(0)})}}setConnection(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()}abandonConnection(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}}updateState(t,e){var n=this.state;if(this.state=t,n!==t){var i=t;"connected"===i&&(i+=" with new socket ID "+e.socket_id),V.debug("State changed",n+" -> "+i),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}}shouldRetry(){return"connecting"===this.state||"connected"===this.state}}class Ht{constructor(){this.channels={}}add(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return Ut.createEncryptedChannel(t,e,e.config.nacl);let n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",i=u("encryptedChannelSupport");throw new v(`${n}. ${i}`)}if(0===t.indexOf("private-"))return Ut.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return Ut.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new d('Cannot create a channel with name "'+t+'".');return Ut.createChannel(t,e)}(t,e)),this.channels[t]}all(){return function(t){var e=[];return M(t,(function(t){e.push(t)})),e}(this.channels)}find(t){return this.channels[t]}remove(t){var e=this.channels[t];return delete this.channels[t],e}disconnect(){M(this.channels,(function(t){t.disconnect()}))}}var Ut={createChannels:()=>new Ht,createConnectionManager:(t,e)=>new Nt(t,e),createChannel:(t,e)=>new Ot(t,e),createPrivateChannel:(t,e)=>new xt(t,e),createPresenceChannel:(t,e)=>new Rt(t,e),createEncryptedChannel:(t,e,n)=>new jt(t,e,n),createTimelineSender:(t,e)=>new Et(t,e),createHandshake:(t,e)=>new Pt(t,e),createAssistantToTheTransportManager:(t,e,n)=>new _t(t,e,n)};class Mt{constructor(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}getAssistant(t){return Ut.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class zt{constructor(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}isSupported(){return J(this.strategies,j.method("isSupported"))}connect(t,e){var n=this.strategies,i=0,r=this.timeout,s=null,o=(a,c)=>{c?e(null,c):(i+=1,this.loop&&(i%=n.length),i0&&(r=new I(n.timeout,(function(){s.abort(),i(!0)}))),s=t.connect(e,(function(t,e){t&&r&&r.isRunning()&&!n.failFast||(r&&r.ensureAborted(),i(t,e))})),{abort:function(){r&&r.ensureAborted(),s.abort()},forceMinPriority:function(t){s.forceMinPriority(t)}}}}class qt{constructor(t){this.strategies=t}isSupported(){return J(this.strategies,j.method("isSupported"))}connect(t,e){return function(t,e,n){var i=B(t,(function(t,i,r,s){return t.connect(e,n(i,s))}));return{abort:function(){q(i,Bt)},forceMinPriority:function(t){q(i,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(i,r){n[t].error=i,i?function(t){return function(t,e){for(var n=0;n=j.now()){var s=this.transports[i.transport];s&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),r.push(new zt([s],{timeout:2*i.latency+1e3,failFast:!0})))}var o=j.now(),a=r.pop().connect(t,(function i(s,c){s?(Jt(n),r.length>0?(o=j.now(),a=r.pop().connect(t,i)):e(s)):(!function(t,e,n){var i=ue.getLocalStorage();if(i)try{i[Xt(t)]=G({timestamp:j.now(),transport:e,latency:n})}catch(t){}}(n,c.transport.name,j.now()-o),e(null,c))}));return{abort:function(){a.abort()},forceMinPriority:function(e){t=e,a&&a.forceMinPriority(e)}}}}function Xt(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function Jt(t){var e=ue.getLocalStorage();if(e)try{delete e[Xt(t)]}catch(t){}}class $t{constructor(t,{delay:e}){this.strategy=t,this.options={delay:e}}isSupported(){return this.strategy.isSupported()}connect(t,e){var n,i=this.strategy,r=new I(this.options.delay,(function(){n=i.connect(t,e)}));return{abort:function(){r.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}}}class Wt{constructor(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}isSupported(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()}connect(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)}}class Gt{constructor(t){this.strategy=t}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.strategy.connect(t,(function(t,i){i&&n.abort(),e(t,i)}));return n}}function Vt(t){return function(){return t.isSupported()}}var Yt=function(t,e,n){var i={};function r(e,r,s,o,a){var c=n(t,e,r,s,o,a);return i[e]=c,c}var s,o=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=Object.assign({},o,{useTLS:!0}),c=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),h={loop:!0,timeout:15e3,timeoutLimit:6e4},u=new Mt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=new Mt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),d=r("ws","ws",3,o,u),p=r("wss","ws",3,a,u),f=r("sockjs","sockjs",1,c),g=r("xhr_streaming","xhr_streaming",1,c,l),v=r("xdr_streaming","xdr_streaming",1,c,l),m=r("xhr_polling","xhr_polling",1,c),b=r("xdr_polling","xdr_polling",1,c),y=new zt([d],h),w=new zt([p],h),S=new zt([f],h),_=new zt([new Wt(Vt(g),g,v)],h),k=new zt([new Wt(Vt(m),m,b)],h),C=new zt([new Wt(Vt(_),new qt([_,new $t(k,{delay:4e3})]),k)],h),T=new Wt(Vt(C),C,S);return s=e.useTLS?new qt([y,new $t(T,{delay:2e3})]):new qt([y,new $t(w,{delay:2e3}),new $t(T,{delay:5e3})]),new Ft(new Gt(new Wt(Vt(d),s,T)),i,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})},Qt={getRequest:function(t){var e=new window.XDomainRequest;return e.ontimeout=function(){t.emit("error",new p),t.close()},e.onerror=function(e){t.emit("error",e),t.close()},e.onprogress=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText)},e.onload=function(){e.responseText&&e.responseText.length>0&&t.onChunk(200,e.responseText),t.emit("finished",200),t.close()},e},abortRequest:function(t){t.ontimeout=t.onerror=t.onprogress=t.onload=null,t.abort()}};class Kt extends at{constructor(t,e,n){super(),this.hooks=t,this.method=e,this.url=n}start(t){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},ue.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)}close(){this.unloader&&(ue.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")}advanceBuffer(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null}isBufferTooLong(t){return this.position===t.length&&t.length>262144}}var Zt;!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(Zt||(Zt={}));var te=Zt,ee=1;function ne(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+ee++}function ie(t){return ue.randomInt(t)}var re,se=class{constructor(t,e){this.hooks=t,this.session=ie(1e3)+"/"+function(t){for(var e=[],n=0;n{this.onChunk(t)}),this.stream.bind("finished",t=>{this.hooks.onFinished(this,t)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(t){j.defer(()=>{this.onError(t),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}},oe={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr_streaming"+t.queryString},onHeartbeat:function(t){t.sendRaw("[]")},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){t.onClose(1006,"Connection interrupted ("+e+")",!1)}},ae={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr"+t.queryString},onHeartbeat:function(){},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){200===e?t.reconnect():t.onClose(1006,"Connection interrupted ("+e+")",!1)}},ce={getRequest:function(t){var e=new(ue.getXHRAPI());return e.onreadystatechange=e.onprogress=function(){switch(e.readyState){case 3:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},he={createStreamingSocket(t){return this.createSocket(oe,t)},createPollingSocket(t){return this.createSocket(ae,t)},createSocket:(t,e)=>new se(t,e),createXHR(t,e){return this.createRequest(ce,t,e)},createRequest:(t,e,n)=>new Kt(t,e,n),createXDR:function(t,e){return this.createRequest(Qt,t,e)}},ue={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:r,DependenciesReceivers:o,getDefaultStrategy:Yt,Transports:wt,transportConnectionInitializer:function(){var t=this;t.timeline.info(t.buildTimelineMessage({transport:t.name+(t.options.useTLS?"s":"")})),t.hooks.isInitialized()?t.changeState("initialized"):t.hooks.file?(t.changeState("initializing"),a.load(t.hooks.file,{useTLS:t.options.useTLS},(function(e,n){t.hooks.isInitialized()?(t.changeState("initialized"),n(!0)):(e&&t.onError(e),t.onClose(),n(!1))}))):t.onClose()},HTTPFactory:he,TimelineTransport:Z,getXHRAPI:()=>window.XMLHttpRequest,getWebSocketAPI:()=>window.WebSocket||window.MozWebSocket,setup(t){window.Pusher=t;var e=()=>{this.onDocumentBody(t.ready)};window.JSON?e():a.load("json2",{},e)},getDocument:()=>document,getProtocol(){return this.getDocument().location.protocol},getAuthorizers:()=>({ajax:w,jsonp:Y}),onDocumentBody(t){document.body?t():setTimeout(()=>{this.onDocumentBody(t)},0)},createJSONPRequest:(t,e)=>new K(t,e),createScriptRequest:t=>new Q(t),getLocalStorage(){try{return window.localStorage}catch(t){return}},createXHR(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest(){return new(this.getXHRAPI())},createMicrosoftXHR:()=>new ActiveXObject("Microsoft.XMLHTTP"),getNetwork:()=>St,createWebSocket(t){return new(this.getWebSocketAPI())(t)},createSocketRequest(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);if(this.isXDRSupported(0===e.indexOf("https:")))return this.HTTPFactory.createXDR(t,e);throw"Cross-origin HTTP requests are not supported"},isXHRSupported(){var t=this.getXHRAPI();return Boolean(t)&&void 0!==(new t).withCredentials},isXDRSupported(t){var e=t?"https:":"http:",n=this.getProtocol();return Boolean(window.XDomainRequest)&&n===e},addUnloadListener(t){void 0!==window.addEventListener?window.addEventListener("unload",t,!1):void 0!==window.attachEvent&&window.attachEvent("onunload",t)},removeUnloadListener(t){void 0!==window.addEventListener?window.removeEventListener("unload",t,!1):void 0!==window.detachEvent&&window.detachEvent("onunload",t)},randomInt:t=>Math.floor((window.crypto||window.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(re||(re={}));var le=re;class de{constructor(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}log(t,e){t<=this.options.level&&(this.events.push(N({},e,{timestamp:j.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(t){this.log(le.ERROR,t)}info(t){this.log(le.INFO,t)}debug(t){this.log(le.DEBUG,t)}isEmpty(){return 0===this.events.length}send(t,e){var n=N({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(n,(t,n)=>{t||this.sent++,e&&e(t,n)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class pe{constructor(t,e,n,i){this.name=t,this.priority=e,this.transport=n,this.options=i||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(t,e){if(!this.isSupported())return fe(new b,e);if(this.priority{n||(h(),r?r.close():i.close())},forceMinPriority:t=>{n||this.priority{if(void 0===ue.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const i=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var i in e.params)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e.params[i]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var i in t)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(t[i])}return n})(e,t);ue.getAuthorizers()[t.transport](ue,i,t,h.UserAuthentication,n)}};var ye=t=>{if(void 0===ue.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const i=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var i in n+="&channel_name="+encodeURIComponent(t.channelName),e.params)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e.params[i]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var i in t)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(t[i])}return n})(e,t);ue.getAuthorizers()[t.transport](ue,i,t,h.ChannelAuthorization,n)}};function we(t){return t.httpHost?t.httpHost:t.cluster?`sockjs-${t.cluster}.pusher.com`:s.httpHost}function Se(t){return t.wsHost?t.wsHost:`ws-${t.cluster}.pusher.com`}function _e(t){return"https:"===ue.getProtocol()||!1!==t.forceTLS}function ke(t){return"enableStats"in t?t.enableStats:"disableStats"in t&&!t.disableStats}function Ce(t){const e=Object.assign(Object.assign({},s.userAuthentication),t.userAuthentication);return"customHandler"in e&&null!=e.customHandler?e.customHandler:be(e)}function Te(t,e){const n=function(t,e){let n;return"channelAuthorization"in t?n=Object.assign(Object.assign({},s.channelAuthorization),t.channelAuthorization):(n={transport:t.authTransport||s.authTransport,endpoint:t.authEndpoint||s.authEndpoint},"auth"in t&&("params"in t.auth&&(n.params=t.auth.params),"headers"in t.auth&&(n.headers=t.auth.headers)),"authorizer"in t&&(n.customHandler=((t,e,n)=>{const i={authTransport:e.transport,authEndpoint:e.endpoint,auth:{params:e.params,headers:e.headers}};return(e,r)=>{const s=t.channel(e.channelName);n(s,i).authorize(e.socketId,r)}})(e,n,t.authorizer))),n}(t,e);return"customHandler"in n&&null!=n.customHandler?n.customHandler:ye(n)}class Pe extends at{constructor(t){super((function(t,e){V.debug("No callbacks on watchlist events for "+t)})),this.pusher=t,this.bindWatchlistInternalEvent()}handleEvent(t){t.data.events.forEach(t=>{this.emit(t.name,t)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",t=>{"pusher_internal:watchlist_events"===t.event&&this.handleEvent(t)})}}var Ee=function(){let t,e;return{promise:new Promise((n,i)=>{t=n,e=i}),resolve:t,reject:e}};class Oe extends at{constructor(t){super((function(t,e){V.debug("No callbacks on user for "+t)})),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(t,e)=>{if(t)return V.warn("Error during signin: "+t),void this._cleanup();this.pusher.send_event("pusher:signin",{auth:e.auth,user_data:e.user_data})},this.pusher=t,this.pusher.connection.bind("state_change",({previous:t,current:e})=>{"connected"!==t&&"connected"===e&&this._signin(),"connected"===t&&"connected"!==e&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new Pe(t),this.pusher.connection.bind("message",t=>{"pusher:signin_success"===t.event&&this._onSigninSuccess(t.data),this.serverToUserChannel&&this.serverToUserChannel.name===t.channel&&this.serverToUserChannel.handleEvent(t)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),"connected"===this.pusher.connection.state&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(t){try{this.user_data=JSON.parse(t.user_data)}catch(e){return V.error("Failed parsing user data after signin: "+t.user_data),void this._cleanup()}if("string"!=typeof this.user_data.id||""===this.user_data.id)return V.error("user_data doesn't contain an id. user_data: "+this.user_data),void this._cleanup();this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){this.serverToUserChannel=new Ot("#server-to-user-"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global((t,e)=>{0!==t.indexOf("pusher_internal:")&&0!==t.indexOf("pusher:")&&this.emit(t,e)}),(t=>{t.subscriptionPending&&t.subscriptionCancelled?t.reinstateSubscription():t.subscriptionPending||"connected"!==this.pusher.connection.state||t.subscribe()})(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested)return;if(this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:t,resolve:e,reject:n}=Ee();t.done=!1;const i=()=>{t.done=!0};t.then(i).catch(i),this.signinDonePromise=t,this._signinDoneResolve=e}}class xe{static ready(){xe.isReady=!0;for(var t=0,e=xe.instances.length;tue.getDefaultStrategy(this.config,t,ve),timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:Boolean(this.config.useTLS)}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",t=>{var e=0===t.event.indexOf("pusher_internal:");if(t.channel){var n=this.channel(t.channel);n&&n.handleEvent(t)}e||this.global_emitter.emit(t.event,t.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",t=>{V.warn(t)}),xe.instances.push(this),this.timeline.info({instances:xe.instances.length}),this.user=new Oe(this),xe.isReady&&this.connect()}channel(t){return this.channels.find(t)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),e=this.timelineSender;this.timelineSenderTimer=new D(6e4,(function(){e.send(t)}))}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(t,e,n){return this.global_emitter.bind(t,e,n),this}unbind(t,e,n){return this.global_emitter.unbind(t,e,n),this}bind_global(t){return this.global_emitter.bind_global(t),this}unbind_global(t){return this.global_emitter.unbind_global(t),this}unbind_all(t){return this.global_emitter.unbind_all(),this}subscribeAll(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)}subscribe(t){var e=this.channels.add(t,this);return e.subscriptionPending&&e.subscriptionCancelled?e.reinstateSubscription():e.subscriptionPending||"connected"!==this.connection.state||e.subscribe(),e}unsubscribe(t){var e=this.channels.find(t);e&&e.subscriptionPending?e.cancelSubscription():(e=this.channels.remove(t))&&e.subscribed&&e.unsubscribe()}send_event(t,e,n){return this.connection.send_event(t,e,n)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}xe.instances=[],xe.isReady=!1,xe.logToConsole=!1,xe.Runtime=ue,xe.ScriptReceivers=ue.ScriptReceivers,xe.DependenciesReceivers=ue.DependenciesReceivers,xe.auth_callbacks=ue.auth_callbacks;var Le=e.default=xe;ue.setup(xe)}])})); //# sourceMappingURL=pusher.min.js.map \ No newline at end of file diff --git a/dist/web/pusher.min.js.map b/dist/web/pusher.min.js.map index 3a34a97d8..740f7aef8 100644 --- a/dist/web/pusher.min.js.map +++ b/dist/web/pusher.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/options.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","this","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","default","AuthRequestType","prefix","lastId","callback","number","id","called","callbackWrapper","apply","arguments","remove","receiver","ScriptReceivers","ScriptReceiverFactory","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","options","receivers","loading","load","self","request","createScriptRequest","getPath","error","callbacks","successCallback","wasSuccessful","cleanup","send","getRoot","protocol","getDocument","location","useTLS","replace","version","suffix","DependenciesReceivers","Dependencies","urlStore","baseUrl","urls","authenticationEndpoint","path","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","url","urlObj","urlPrefix","msg","setPrototypeOf","status","context","query","authOptions","authRequestType","xhr","createXHR","headerName","open","setRequestHeader","headers","headersProvider","dynamicHeaders","onreadystatechange","readyState","parsed","JSON","parse","responseText","e","HTTPAuthError","toString","UserAuthentication","ChannelAuthorization","b64chars","b64tab","charAt","cb_utob","cc","utob","u","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","timer","isRunning","ensureAborted","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","OneOffTimer","method","boundArguments","Array","slice","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","f","keys","_","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","buildQueryString","params","undefined","source","objects","paths","derez","nu","$ref","globalLog","message","console","log","debug","args","warn","globalLogWarn","globalLogError","defaultLoggingFunction","logToConsole","callbackName","nextAuthCallbackID","document","script","createElement","auth_callbacks","callback_name","src","head","getElementsByTagName","documentElement","insertBefore","firstChild","errorString","type","charset","addEventListener","onerror","onload","async","attachEvent","navigator","userAgent","errorScript","text","nextSibling","parentNode","removeChild","getAgent","sender","host","createJSONPRequest","getGenericURL","baseScheme","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","sockjs","_callbacks","add","prefixedEventName","fn","names","removeCallback","removeAllCallbacks","binding","failThrough","global_callbacks","eventName","bind_global","unbind","unbind_global","unbind_all","emit","metadata","hooks","priority","initialize","transportConnectionInitializer","state","timeline","generateUniqueID","handlesActivityChecks","supportsPing","connect","socket","getSocket","onError","changeState","bindListeners","close","ping","onOpen","beforeOpen","onopen","buildTimelineMessage","onClose","closeEvent","code","reason","wasClean","unbindListeners","onMessage","onActivity","onclose","onmessage","onactivity","info","cid","isSupported","environment","createConnection","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","SockJSTransport","file","SockJS","js_path","ignore_null_origin","ignoreNullOrigin","xdrConfiguration","isXDRSupported","XDRStreamingTransport","XDRPollingTransport","xdr_streaming","xdr_polling","isOnline","onLine","manager","minPingDelay","maxPingDelay","pingDelay","connection","openTimestamp","onClosed","reportDeath","lifespan","Math","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","finish","isEmpty","TimelineTransport","pusher","subscribed","subscriptionPending","subscriptionCancelled","authorize","socketId","auth","trigger","disconnect","handleEvent","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","subscribe","assign","channel_data","cancelSubscription","reinstateSubscription","config","channelAuthorizer","channelName","reset","members","each","member","setMyID","myID","onSubscription","subscriptionData","presence","hash","count","me","addMember","memberData","user_info","removeMember","authData","channelData","user","signinDonePromise","user_data","handleInternalEvent","addedMember","removedMember","nacl","sharedSecret","handleEncryptedEvent","ciphertext","nonce","cipherText","secretbox","overheadLength","nonceLength","bytes","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","isUsingTLS","handshake","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","all","values","find","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","getAssistant","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","trueBranch","falseBranch","testSupportsStrategy","State","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","sockjs_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","sockjs_transport","xhr_streaming_transport","xdr_streaming_transport","xhr_polling_transport","xdr_polling_transport","ws_loop","wss_loop","sockjs_loop","streaming_loop","polling_loop","http_loop","http_fallback_loop","getRequest","xdr","XDomainRequest","ontimeout","onprogress","onChunk","abortRequest","start","payload","position","unloader","addUnloadListener","removeUnloadListener","chunk","advanceBuffer","isBufferTooLong","buffer","unreadData","endOfLinePosition","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","parts","exec","base","getLocation","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","reconnect","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","getXHRAPI","createSocket","createRequest","getDefaultStrategy","Transports","XMLHttpRequest","WebSocket","MozWebSocket","setup","PusherClass","Pusher","initializeOnDocumentBody","onDocumentBody","ready","getProtocol","getAuthorizers","ajax","jsonp","body","localStorage","createXMLHttpRequest","createMicrosoftXHR","ActiveXObject","createXDR","Constructor","withCredentials","documentProtocol","removeEventListener","detachEvent","floor","crypto","getRandomValues","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","cluster","features","failAttempt","onInitialized","serializedTransport","transportClass","enabledTransports","disabledTransports","deferred","paramsProvider","dynamicParams","composeChannelQuery","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","err","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","signin","userAuthenticator","_subscribeChannels","done","setDone","then","app_key","checkAppKey","validateOptions","statsHost","timelineParams","global_emitter","sessionID","getClientFeatures","timelineSender","subscribeAll","internal","instances","isReady","allChannels","timelineSenderTimer","PeriodicTimer","event_name","channel_name","Runtime"],"mappings":"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","file":"pusher.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/options.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","this","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","default","ScriptReceiverFactory","prefix","lastId","callback","number","id","called","callbackWrapper","apply","arguments","receiver","ScriptReceivers","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","DependenciesReceivers","Dependencies","options","receivers","loading","self","request","createScriptRequest","getPath","error","remove","callbacks","successCallback","wasSuccessful","cleanup","send","protocol","getDocument","location","useTLS","replace","version","getRoot","suffix","urlStore","baseUrl","urls","authenticationEndpoint","path","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","AuthRequestType","urlObj","url","BadEventName","msg","super","setPrototypeOf","BadChannelName","RequestTimedOut","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","status","context","query","authOptions","authRequestType","xhr","createXHR","headerName","open","setRequestHeader","headers","headersProvider","dynamicHeaders","onreadystatechange","readyState","parsed","JSON","parse","responseText","e","toString","UserAuthentication","ChannelAuthorization","b64chars","b64tab","charAt","cb_utob","cc","utob","u","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","timer","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","args","boundArguments","Array","slice","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","f","keys","_","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","buildQueryString","params","undefined","method","source","objects","paths","derez","nu","$ref","globalLog","message","console","log","globalLogWarn","globalLogError","warn","defaultLoggingFunction","logToConsole","callbackName","nextAuthCallbackID","document","script","createElement","auth_callbacks","callback_name","src","head","getElementsByTagName","documentElement","insertBefore","firstChild","ScriptRequest","errorString","type","charset","addEventListener","onerror","onload","async","attachEvent","navigator","userAgent","errorScript","text","nextSibling","parentNode","removeChild","getAgent","sender","host","createJSONPRequest","getGenericURL","baseScheme","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","sockjs","_callbacks","prefixedEventName","fn","names","removeCallback","removeAllCallbacks","binding","failThrough","global_callbacks","eventName","add","unbind","unbind_global","metadata","hooks","priority","initialize","transportConnectionInitializer","state","timeline","generateUniqueID","handlesActivityChecks","supportsPing","socket","getSocket","onError","changeState","bindListeners","debug","close","ping","beforeOpen","onopen","emit","buildTimelineMessage","closeEvent","code","reason","wasClean","unbindListeners","onOpen","onclose","onClose","onmessage","onMessage","onactivity","onActivity","info","cid","environment","isSupported","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","SockJSTransport","file","SockJS","js_path","ignore_null_origin","ignoreNullOrigin","xdrConfiguration","isXDRSupported","XDRStreamingTransport","XDRPollingTransport","xdr_streaming","xdr_polling","onLine","manager","minPingDelay","maxPingDelay","pingDelay","connection","createConnection","openTimestamp","onClosed","reportDeath","lifespan","Math","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","finish","isEmpty","TimelineTransport","pusher","subscribed","subscriptionPending","subscriptionCancelled","socketId","auth","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","authorize","assign","channel_data","config","channelAuthorizer","channelName","reset","members","member","myID","subscriptionData","presence","hash","count","me","memberData","user_info","authData","channelData","setMyID","user","signinDonePromise","user_data","handleInternalEvent","addedMember","addMember","removedMember","removeMember","onSubscription","disconnect","nacl","sharedSecret","handleEncryptedEvent","handleEvent","ciphertext","nonce","cipherText","secretbox","overheadLength","nonceLength","bytes","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","handshake","connect","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","ensureAborted","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","values","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","isRunning","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","sockjs_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","sockjs_transport","xhr_streaming_transport","xdr_streaming_transport","xhr_polling_transport","xdr_polling_transport","ws_loop","wss_loop","sockjs_loop","streaming_loop","polling_loop","http_loop","http_fallback_loop","getRequest","xdr","XDomainRequest","ontimeout","onprogress","onChunk","abortRequest","payload","position","unloader","addUnloadListener","removeUnloadListener","chunk","advanceBuffer","isBufferTooLong","buffer","unreadData","endOfLinePosition","State","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","parts","exec","base","getLocation","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","start","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","reconnect","unbind_all","getXHRAPI","createSocket","createRequest","getDefaultStrategy","Transports","load","XMLHttpRequest","WebSocket","MozWebSocket","PusherClass","Pusher","initializeOnDocumentBody","onDocumentBody","ready","getAuthorizers","ajax","jsonp","body","localStorage","createXMLHttpRequest","createMicrosoftXHR","ActiveXObject","createXDR","Constructor","withCredentials","documentProtocol","getProtocol","removeEventListener","detachEvent","floor","crypto","getRandomValues","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","cluster","features","failAttempt","onInitialized","serializedTransport","transportClass","enabledTransports","disabledTransports","getAssistant","deferred","paramsProvider","dynamicParams","composeChannelQuery","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","err","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","userAuthenticator","_subscribeChannels","bind_global","reinstateSubscription","subscribe","ensure_subscribed","done","setDone","then","catch","isReady","instances","app_key","checkAppKey","validateOptions","statsHost","timelineParams","getConfig","global_emitter","sessionID","getClientFeatures","timelineSender","subscribeAll","isUsingTLS","internal","find","all","timelineSenderTimer","event_name","channel_name","cancelSubscription","signin","Runtime","setup"],"mappings":"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","file":"pusher.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/worker/pusher-with-encryption.worker.js b/dist/worker/pusher-with-encryption.worker.js index 82d6b96d1..b0dab8379 100644 --- a/dist/worker/pusher-with-encryption.worker.js +++ b/dist/worker/pusher-with-encryption.worker.js @@ -1,5 +1,5 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher @@ -2963,6 +2963,9 @@ module.exports = __webpack_require__(5).default; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); +// EXPORTS +__webpack_require__.d(__webpack_exports__, "default", function() { return /* binding */ pusher_with_encryption_PusherWithEncryption; }); + // CONCATENATED MODULE: ./src/core/base64.ts function encode(s) { return btoa(utob(s)); @@ -3005,43 +3008,28 @@ var btoa = self.btoa || }; // CONCATENATED MODULE: ./src/core/utils/timers/abstract_timer.ts -var Timer = (function () { - function Timer(set, clear, delay, callback) { - var _this = this; +class Timer { + constructor(set, clear, delay, callback) { this.clear = clear; - this.timer = set(function () { - if (_this.timer) { - _this.timer = callback(_this.timer); + this.timer = set(() => { + if (this.timer) { + this.timer = callback(this.timer); } }, delay); } - Timer.prototype.isRunning = function () { + isRunning() { return this.timer !== null; - }; - Timer.prototype.ensureAborted = function () { + } + ensureAborted() { if (this.timer) { this.clear(this.timer); this.timer = null; } - }; - return Timer; -}()); + } +} /* harmony default export */ var abstract_timer = (Timer); // CONCATENATED MODULE: ./src/core/utils/timers/index.ts -var __extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); function timers_clearTimeout(timer) { self.clearTimeout(timer); @@ -3049,33 +3037,27 @@ function timers_clearTimeout(timer) { function timers_clearInterval(timer) { self.clearInterval(timer); } -var OneOffTimer = (function (_super) { - __extends(OneOffTimer, _super); - function OneOffTimer(delay, callback) { - return _super.call(this, setTimeout, timers_clearTimeout, delay, function (timer) { +class timers_OneOffTimer extends abstract_timer { + constructor(delay, callback) { + super(setTimeout, timers_clearTimeout, delay, function (timer) { callback(); return null; - }) || this; + }); } - return OneOffTimer; -}(abstract_timer)); - -var PeriodicTimer = (function (_super) { - __extends(PeriodicTimer, _super); - function PeriodicTimer(delay, callback) { - return _super.call(this, setInterval, timers_clearInterval, delay, function (timer) { +} +class timers_PeriodicTimer extends abstract_timer { + constructor(delay, callback) { + super(setInterval, timers_clearInterval, delay, function (timer) { callback(); return timer; - }) || this; + }); } - return PeriodicTimer; -}(abstract_timer)); - +} // CONCATENATED MODULE: ./src/core/util.ts var Util = { - now: function () { + now() { if (Date.now) { return Date.now(); } @@ -3083,14 +3065,10 @@ var Util = { return new Date().valueOf(); } }, - defer: function (callback) { - return new OneOffTimer(0, callback); + defer(callback) { + return new timers_OneOffTimer(0, callback); }, - method: function (name) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + method(name, ...args) { var boundArguments = Array.prototype.slice.call(arguments, 1); return function (object) { return object[name].apply(object, boundArguments.concat(arguments)); @@ -3102,11 +3080,7 @@ var Util = { // CONCATENATED MODULE: ./src/core/utils/collections.ts -function extend(target) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } +function extend(target, ...sources) { for (var i = 0; i < sources.length; i++) { var extensions = sources[i]; for (var property in extensions) { @@ -3299,7 +3273,7 @@ function safeJSONStringify(source) { // CONCATENATED MODULE: ./src/core/defaults.ts var Defaults = { - VERSION: "8.0.2", + VERSION: "8.1.0", PROTOCOL: 7, wsPort: 80, wssPort: 443, @@ -3368,14 +3342,14 @@ var sockjs = { // CONCATENATED MODULE: ./src/core/events/callback_registry.ts -var callback_registry_CallbackRegistry = (function () { - function CallbackRegistry() { +class callback_registry_CallbackRegistry { + constructor() { this._callbacks = {}; } - CallbackRegistry.prototype.get = function (name) { + get(name) { return this._callbacks[prefix(name)]; - }; - CallbackRegistry.prototype.add = function (name, callback, context) { + } + add(name, callback, context) { var prefixedEventName = prefix(name); this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || []; @@ -3383,8 +3357,8 @@ var callback_registry_CallbackRegistry = (function () { fn: callback, context: context }); - }; - CallbackRegistry.prototype.remove = function (name, callback, context) { + } + remove(name, callback, context) { if (!name && !callback && !context) { this._callbacks = {}; return; @@ -3396,8 +3370,8 @@ var callback_registry_CallbackRegistry = (function () { else { this.removeAllCallbacks(names); } - }; - CallbackRegistry.prototype.removeCallback = function (names, callback, context) { + } + removeCallback(names, callback, context) { apply(names, function (name) { this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) { return ((callback && callback !== binding.fn) || @@ -3407,15 +3381,13 @@ var callback_registry_CallbackRegistry = (function () { delete this._callbacks[name]; } }, this); - }; - CallbackRegistry.prototype.removeAllCallbacks = function (names) { + } + removeAllCallbacks(names) { apply(names, function (name) { delete this._callbacks[name]; }, this); - }; - return CallbackRegistry; -}()); -/* harmony default export */ var callback_registry = (callback_registry_CallbackRegistry); + } +} function prefix(name) { return '_' + name; } @@ -3423,38 +3395,38 @@ function prefix(name) { // CONCATENATED MODULE: ./src/core/events/dispatcher.ts -var dispatcher_Dispatcher = (function () { - function Dispatcher(failThrough) { - this.callbacks = new callback_registry(); +class dispatcher_Dispatcher { + constructor(failThrough) { + this.callbacks = new callback_registry_CallbackRegistry(); this.global_callbacks = []; this.failThrough = failThrough; } - Dispatcher.prototype.bind = function (eventName, callback, context) { + bind(eventName, callback, context) { this.callbacks.add(eventName, callback, context); return this; - }; - Dispatcher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_callbacks.push(callback); return this; - }; - Dispatcher.prototype.unbind = function (eventName, callback, context) { + } + unbind(eventName, callback, context) { this.callbacks.remove(eventName, callback, context); return this; - }; - Dispatcher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { if (!callback) { this.global_callbacks = []; return this; } - this.global_callbacks = filter(this.global_callbacks || [], function (c) { return c !== callback; }); + this.global_callbacks = filter(this.global_callbacks || [], c => c !== callback); return this; - }; - Dispatcher.prototype.unbind_all = function () { + } + unbind_all() { this.unbind(); this.unbind_global(); return this; - }; - Dispatcher.prototype.emit = function (eventName, data, metadata) { + } + emit(eventName, data, metadata) { for (var i = 0; i < this.global_callbacks.length; i++) { this.global_callbacks[i](eventName, data); } @@ -3475,120 +3447,85 @@ var dispatcher_Dispatcher = (function () { this.failThrough(eventName, data); } return this; - }; - return Dispatcher; -}()); -/* harmony default export */ var dispatcher = (dispatcher_Dispatcher); + } +} // CONCATENATED MODULE: ./src/core/logger.ts -var logger_Logger = (function () { - function Logger() { - this.globalLog = function (message) { +class logger_Logger { + constructor() { + this.globalLog = (message) => { if (self.console && self.console.log) { self.console.log(message); } }; } - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + debug(...args) { this.log(this.globalLog, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + warn(...args) { this.log(this.globalLogWarn, args); - }; - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + error(...args) { this.log(this.globalLogError, args); - }; - Logger.prototype.globalLogWarn = function (message) { + } + globalLogWarn(message) { if (self.console && self.console.warn) { self.console.warn(message); } else { this.globalLog(message); } - }; - Logger.prototype.globalLogError = function (message) { + } + globalLogError(message) { if (self.console && self.console.error) { self.console.error(message); } else { this.globalLogWarn(message); } - }; - Logger.prototype.log = function (defaultLoggingFunction) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + } + log(defaultLoggingFunction, ...args) { var message = stringify.apply(this, arguments); if (core_pusher.log) { core_pusher.log(message); } else if (core_pusher.logToConsole) { - var log = defaultLoggingFunction.bind(this); + const log = defaultLoggingFunction.bind(this); log(message); } - }; - return Logger; -}()); + } +} /* harmony default export */ var logger = (new logger_Logger()); // CONCATENATED MODULE: ./src/core/transports/transport_connection.ts -var transport_connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var transport_connection_TransportConnection = (function (_super) { - transport_connection_extends(TransportConnection, _super); - function TransportConnection(hooks, name, priority, key, options) { - var _this = _super.call(this) || this; - _this.initialize = worker_runtime.transportConnectionInitializer; - _this.hooks = hooks; - _this.name = name; - _this.priority = priority; - _this.key = key; - _this.options = options; - _this.state = 'new'; - _this.timeline = options.timeline; - _this.activityTimeout = options.activityTimeout; - _this.id = _this.timeline.generateUniqueID(); - return _this; +class transport_connection_TransportConnection extends dispatcher_Dispatcher { + constructor(hooks, name, priority, key, options) { + super(); + this.initialize = worker_runtime.transportConnectionInitializer; + this.hooks = hooks; + this.name = name; + this.priority = priority; + this.key = key; + this.options = options; + this.state = 'new'; + this.timeline = options.timeline; + this.activityTimeout = options.activityTimeout; + this.id = this.timeline.generateUniqueID(); } - TransportConnection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return Boolean(this.hooks.handlesActivityChecks); - }; - TransportConnection.prototype.supportsPing = function () { + } + supportsPing() { return Boolean(this.hooks.supportsPing); - }; - TransportConnection.prototype.connect = function () { - var _this = this; + } + connect() { if (this.socket || this.state !== 'initialized') { return false; } @@ -3597,18 +3534,18 @@ var transport_connection_TransportConnection = (function (_super) { this.socket = this.hooks.getSocket(url, this.options); } catch (e) { - util.defer(function () { - _this.onError(e); - _this.changeState('closed'); + util.defer(() => { + this.onError(e); + this.changeState('closed'); }); return false; } this.bindListeners(); - logger.debug('Connecting', { transport: this.name, url: url }); + logger.debug('Connecting', { transport: this.name, url }); this.changeState('connecting'); return true; - }; - TransportConnection.prototype.close = function () { + } + close() { if (this.socket) { this.socket.close(); return true; @@ -3616,13 +3553,12 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.send = function (data) { - var _this = this; + } + send(data) { if (this.state === 'open') { - util.defer(function () { - if (_this.socket) { - _this.socket.send(data); + util.defer(() => { + if (this.socket) { + this.socket.send(data); } }); return true; @@ -3630,24 +3566,24 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.ping = function () { + } + ping() { if (this.state === 'open' && this.supportsPing()) { this.socket.ping(); } - }; - TransportConnection.prototype.onOpen = function () { + } + onOpen() { if (this.hooks.beforeOpen) { this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options)); } this.changeState('open'); this.socket.onopen = undefined; - }; - TransportConnection.prototype.onError = function (error) { + } + onError(error) { this.emit('error', { type: 'WebSocketError', error: error }); this.timeline.error(this.buildTimelineMessage({ error: error.toString() })); - }; - TransportConnection.prototype.onClose = function (closeEvent) { + } + onClose(closeEvent) { if (closeEvent) { this.changeState('closed', { code: closeEvent.code, @@ -3660,34 +3596,33 @@ var transport_connection_TransportConnection = (function (_super) { } this.unbindListeners(); this.socket = undefined; - }; - TransportConnection.prototype.onMessage = function (message) { + } + onMessage(message) { this.emit('message', message); - }; - TransportConnection.prototype.onActivity = function () { + } + onActivity() { this.emit('activity'); - }; - TransportConnection.prototype.bindListeners = function () { - var _this = this; - this.socket.onopen = function () { - _this.onOpen(); + } + bindListeners() { + this.socket.onopen = () => { + this.onOpen(); }; - this.socket.onerror = function (error) { - _this.onError(error); + this.socket.onerror = error => { + this.onError(error); }; - this.socket.onclose = function (closeEvent) { - _this.onClose(closeEvent); + this.socket.onclose = closeEvent => { + this.onClose(closeEvent); }; - this.socket.onmessage = function (message) { - _this.onMessage(message); + this.socket.onmessage = message => { + this.onMessage(message); }; if (this.supportsPing()) { - this.socket.onactivity = function () { - _this.onActivity(); + this.socket.onactivity = () => { + this.onActivity(); }; } - }; - TransportConnection.prototype.unbindListeners = function () { + } + unbindListeners() { if (this.socket) { this.socket.onopen = undefined; this.socket.onerror = undefined; @@ -3697,44 +3632,40 @@ var transport_connection_TransportConnection = (function (_super) { this.socket.onactivity = undefined; } } - }; - TransportConnection.prototype.changeState = function (state, params) { + } + changeState(state, params) { this.state = state; this.timeline.info(this.buildTimelineMessage({ state: state, params: params })); this.emit(state, params); - }; - TransportConnection.prototype.buildTimelineMessage = function (message) { + } + buildTimelineMessage(message) { return extend({ cid: this.id }, message); - }; - return TransportConnection; -}(dispatcher)); -/* harmony default export */ var transport_connection = (transport_connection_TransportConnection); + } +} // CONCATENATED MODULE: ./src/core/transports/transport.ts -var transport_Transport = (function () { - function Transport(hooks) { +class transport_Transport { + constructor(hooks) { this.hooks = hooks; } - Transport.prototype.isSupported = function (environment) { + isSupported(environment) { return this.hooks.isSupported(environment); - }; - Transport.prototype.createConnection = function (name, priority, key, options) { - return new transport_connection(this.hooks, name, priority, key, options); - }; - return Transport; -}()); -/* harmony default export */ var transports_transport = (transport_Transport); + } + createConnection(name, priority, key, options) { + return new transport_connection_TransportConnection(this.hooks, name, priority, key, options); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/transports/transports.ts -var WSTransport = new transports_transport({ +var WSTransport = new transport_Transport({ urls: ws, handlesActivityChecks: false, supportsPing: false, @@ -3771,8 +3702,8 @@ var xhrConfiguration = { return worker_runtime.isXHRSupported(); } }; -var XHRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xhrConfiguration))); -var XHRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xhrConfiguration)); +var XHRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xhrConfiguration))); +var XHRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xhrConfiguration)); var Transports = { ws: WSTransport, xhr_streaming: XHRStreamingTransport, @@ -3783,16 +3714,15 @@ var Transports = { // CONCATENATED MODULE: ./src/core/transports/assistant_to_the_transport_manager.ts -var assistant_to_the_transport_manager_AssistantToTheTransportManager = (function () { - function AssistantToTheTransportManager(manager, transport, options) { +class assistant_to_the_transport_manager_AssistantToTheTransportManager { + constructor(manager, transport, options) { this.manager = manager; this.transport = transport; this.minPingDelay = options.minPingDelay; this.maxPingDelay = options.maxPingDelay; this.pingDelay = undefined; } - AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) { - var _this = this; + createConnection(name, priority, key, options) { options = extend({}, options, { activityTimeout: this.pingDelay }); @@ -3803,31 +3733,29 @@ var assistant_to_the_transport_manager_AssistantToTheTransportManager = (functio connection.bind('closed', onClosed); openTimestamp = util.now(); }; - var onClosed = function (closeEvent) { + var onClosed = closeEvent => { connection.unbind('closed', onClosed); if (closeEvent.code === 1002 || closeEvent.code === 1003) { - _this.manager.reportDeath(); + this.manager.reportDeath(); } else if (!closeEvent.wasClean && openTimestamp) { var lifespan = util.now() - openTimestamp; - if (lifespan < 2 * _this.maxPingDelay) { - _this.manager.reportDeath(); - _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay); + if (lifespan < 2 * this.maxPingDelay) { + this.manager.reportDeath(); + this.pingDelay = Math.max(lifespan / 2, this.minPingDelay); } } }; connection.bind('open', onOpen); return connection; - }; - AssistantToTheTransportManager.prototype.isSupported = function (environment) { + } + isSupported(environment) { return this.manager.isAlive() && this.transport.isSupported(environment); - }; - return AssistantToTheTransportManager; -}()); -/* harmony default export */ var assistant_to_the_transport_manager = (assistant_to_the_transport_manager_AssistantToTheTransportManager); + } +} // CONCATENATED MODULE: ./src/core/connection/protocol/protocol.ts -var Protocol = { +const Protocol = { decodeMessage: function (messageEvent) { try { var messageData = JSON.parse(messageEvent.data); @@ -3920,68 +3848,52 @@ var Protocol = { /* harmony default export */ var protocol = (Protocol); // CONCATENATED MODULE: ./src/core/connection/connection.ts -var connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_Connection = (function (_super) { - connection_extends(Connection, _super); - function Connection(id, transport) { - var _this = _super.call(this) || this; - _this.id = id; - _this.transport = transport; - _this.activityTimeout = transport.activityTimeout; - _this.bindListeners(); - return _this; +class connection_Connection extends dispatcher_Dispatcher { + constructor(id, transport) { + super(); + this.id = id; + this.transport = transport; + this.activityTimeout = transport.activityTimeout; + this.bindListeners(); } - Connection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return this.transport.handlesActivityChecks(); - }; - Connection.prototype.send = function (data) { + } + send(data) { return this.transport.send(data); - }; - Connection.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { var event = { event: name, data: data }; if (channel) { event.channel = channel; } logger.debug('Event sent', event); return this.send(protocol.encodeMessage(event)); - }; - Connection.prototype.ping = function () { + } + ping() { if (this.transport.supportsPing()) { this.transport.ping(); } else { this.send_event('pusher:ping', {}); } - }; - Connection.prototype.close = function () { + } + close() { this.transport.close(); - }; - Connection.prototype.bindListeners = function () { - var _this = this; + } + bindListeners() { var listeners = { - message: function (messageEvent) { + message: (messageEvent) => { var pusherEvent; try { pusherEvent = protocol.decodeMessage(messageEvent); } catch (e) { - _this.emit('error', { + this.emit('error', { type: 'MessageParseError', error: e, data: messageEvent.data @@ -3991,46 +3903,46 @@ var connection_Connection = (function (_super) { logger.debug('Event recd', pusherEvent); switch (pusherEvent.event) { case 'pusher:error': - _this.emit('error', { + this.emit('error', { type: 'PusherError', data: pusherEvent.data }); break; case 'pusher:ping': - _this.emit('ping'); + this.emit('ping'); break; case 'pusher:pong': - _this.emit('pong'); + this.emit('pong'); break; } - _this.emit('message', pusherEvent); + this.emit('message', pusherEvent); } }, - activity: function () { - _this.emit('activity'); + activity: () => { + this.emit('activity'); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function (closeEvent) { + closed: closeEvent => { unbindListeners(); if (closeEvent && closeEvent.code) { - _this.handleCloseEvent(closeEvent); + this.handleCloseEvent(closeEvent); } - _this.transport = null; - _this.emit('closed'); + this.transport = null; + this.emit('closed'); } }; - var unbindListeners = function () { - objectApply(listeners, function (listener, event) { - _this.transport.unbind(event, listener); + var unbindListeners = () => { + objectApply(listeners, (listener, event) => { + this.transport.unbind(event, listener); }); }; - objectApply(listeners, function (listener, event) { - _this.transport.bind(event, listener); + objectApply(listeners, (listener, event) => { + this.transport.bind(event, listener); }); - }; - Connection.prototype.handleCloseEvent = function (closeEvent) { + } + handleCloseEvent(closeEvent) { var action = protocol.getCloseAction(closeEvent); var error = protocol.getCloseError(closeEvent); if (error) { @@ -4039,203 +3951,138 @@ var connection_Connection = (function (_super) { if (action) { this.emit(action, { action: action, error: error }); } - }; - return Connection; -}(dispatcher)); -/* harmony default export */ var connection_connection = (connection_Connection); + } +} // CONCATENATED MODULE: ./src/core/connection/handshake/index.ts -var handshake_Handshake = (function () { - function Handshake(transport, callback) { +class handshake_Handshake { + constructor(transport, callback) { this.transport = transport; this.callback = callback; this.bindListeners(); } - Handshake.prototype.close = function () { + close() { this.unbindListeners(); this.transport.close(); - }; - Handshake.prototype.bindListeners = function () { - var _this = this; - this.onMessage = function (m) { - _this.unbindListeners(); + } + bindListeners() { + this.onMessage = m => { + this.unbindListeners(); var result; try { result = protocol.processHandshake(m); } catch (e) { - _this.finish('error', { error: e }); - _this.transport.close(); + this.finish('error', { error: e }); + this.transport.close(); return; } if (result.action === 'connected') { - _this.finish('connected', { - connection: new connection_connection(result.id, _this.transport), + this.finish('connected', { + connection: new connection_Connection(result.id, this.transport), activityTimeout: result.activityTimeout }); } else { - _this.finish(result.action, { error: result.error }); - _this.transport.close(); + this.finish(result.action, { error: result.error }); + this.transport.close(); } }; - this.onClosed = function (closeEvent) { - _this.unbindListeners(); + this.onClosed = closeEvent => { + this.unbindListeners(); var action = protocol.getCloseAction(closeEvent) || 'backoff'; var error = protocol.getCloseError(closeEvent); - _this.finish(action, { error: error }); + this.finish(action, { error: error }); }; this.transport.bind('message', this.onMessage); this.transport.bind('closed', this.onClosed); - }; - Handshake.prototype.unbindListeners = function () { + } + unbindListeners() { this.transport.unbind('message', this.onMessage); this.transport.unbind('closed', this.onClosed); - }; - Handshake.prototype.finish = function (action, params) { + } + finish(action, params) { this.callback(extend({ transport: this.transport, action: action }, params)); - }; - return Handshake; -}()); -/* harmony default export */ var connection_handshake = (handshake_Handshake); + } +} // CONCATENATED MODULE: ./src/core/timeline/timeline_sender.ts -var timeline_sender_TimelineSender = (function () { - function TimelineSender(timeline, options) { +class timeline_sender_TimelineSender { + constructor(timeline, options) { this.timeline = timeline; this.options = options || {}; } - TimelineSender.prototype.send = function (useTLS, callback) { + send(useTLS, callback) { if (this.timeline.isEmpty()) { return; } this.timeline.send(worker_runtime.TimelineTransport.getAgent(this, useTLS), callback); - }; - return TimelineSender; -}()); -/* harmony default export */ var timeline_sender = (timeline_sender_TimelineSender); + } +} // CONCATENATED MODULE: ./src/core/errors.ts -var errors_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var BadEventName = (function (_super) { - errors_extends(BadEventName, _super); - function BadEventName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadEventName; -}(Error)); - -var BadChannelName = (function (_super) { - errors_extends(BadChannelName, _super); - function BadChannelName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadChannelName; -}(Error)); - -var RequestTimedOut = (function (_super) { - errors_extends(RequestTimedOut, _super); - function RequestTimedOut(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return RequestTimedOut; -}(Error)); - -var TransportPriorityTooLow = (function (_super) { - errors_extends(TransportPriorityTooLow, _super); - function TransportPriorityTooLow(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportPriorityTooLow; -}(Error)); - -var TransportClosed = (function (_super) { - errors_extends(TransportClosed, _super); - function TransportClosed(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportClosed; -}(Error)); - -var UnsupportedFeature = (function (_super) { - errors_extends(UnsupportedFeature, _super); - function UnsupportedFeature(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedFeature; -}(Error)); - -var UnsupportedTransport = (function (_super) { - errors_extends(UnsupportedTransport, _super); - function UnsupportedTransport(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedTransport; -}(Error)); - -var UnsupportedStrategy = (function (_super) { - errors_extends(UnsupportedStrategy, _super); - function UnsupportedStrategy(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedStrategy; -}(Error)); - -var HTTPAuthError = (function (_super) { - errors_extends(HTTPAuthError, _super); - function HTTPAuthError(status, msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - _this.status = status; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return HTTPAuthError; -}(Error)); - +class BadEventName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class BadChannelName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class RequestTimedOut extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportPriorityTooLow extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportClosed extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedFeature extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedTransport extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedStrategy extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class HTTPAuthError extends Error { + constructor(status, msg) { + super(msg); + this.status = status; + Object.setPrototypeOf(this, new.target.prototype); + } +} // CONCATENATED MODULE: ./src/core/utils/url_store.ts -var urlStore = { +const urlStore = { baseUrl: 'https://pusher.com', urls: { authenticationEndpoint: { @@ -4255,12 +4102,12 @@ var urlStore = { } } }; -var buildLogSuffix = function (key) { - var urlPrefix = 'See:'; - var urlObj = urlStore.urls[key]; +const buildLogSuffix = function (key) { + const urlPrefix = 'See:'; + const urlObj = urlStore.urls[key]; if (!urlObj) return ''; - var url; + let url; if (urlObj.fullUrl) { url = urlObj.fullUrl; } @@ -4269,60 +4116,45 @@ var buildLogSuffix = function (key) { } if (!url) return ''; - return urlPrefix + " " + url; + return `${urlPrefix} ${url}`; }; -/* harmony default export */ var url_store = ({ buildLogSuffix: buildLogSuffix }); +/* harmony default export */ var url_store = ({ buildLogSuffix }); // CONCATENATED MODULE: ./src/core/channels/channel.ts -var channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var channel_Channel = (function (_super) { - channel_extends(Channel, _super); - function Channel(name, pusher) { - var _this = _super.call(this, function (event, data) { +class channel_Channel extends dispatcher_Dispatcher { + constructor(name, pusher) { + super(function (event, data) { logger.debug('No callbacks on ' + name + ' for ' + event); - }) || this; - _this.name = name; - _this.pusher = pusher; - _this.subscribed = false; - _this.subscriptionPending = false; - _this.subscriptionCancelled = false; - return _this; - } - Channel.prototype.authorize = function (socketId, callback) { + }); + this.name = name; + this.pusher = pusher; + this.subscribed = false; + this.subscriptionPending = false; + this.subscriptionCancelled = false; + } + authorize(socketId, callback) { return callback(null, { auth: '' }); - }; - Channel.prototype.trigger = function (event, data) { + } + trigger(event, data) { if (event.indexOf('client-') !== 0) { throw new BadEventName("Event '" + event + "' does not start with 'client-'"); } if (!this.subscribed) { var suffix = url_store.buildLogSuffix('triggeringClientEvents'); - logger.warn("Client event triggered before channel 'subscription_succeeded' event . " + suffix); + logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`); } return this.pusher.send_event(event, data, this.name); - }; - Channel.prototype.disconnect = function () { + } + disconnect() { this.subscribed = false; this.subscriptionPending = false; - }; - Channel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName === 'pusher_internal:subscription_succeeded') { @@ -4335,8 +4167,8 @@ var channel_Channel = (function (_super) { var metadata = {}; this.emit(eventName, data, metadata); } - }; - Channel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -4345,91 +4177,69 @@ var channel_Channel = (function (_super) { else { this.emit('pusher:subscription_succeeded', event.data); } - }; - Channel.prototype.handleSubscriptionCountEvent = function (event) { + } + handleSubscriptionCountEvent(event) { if (event.data.subscription_count) { this.subscriptionCount = event.data.subscription_count; } this.emit('pusher:subscription_count', event.data); - }; - Channel.prototype.subscribe = function () { - var _this = this; + } + subscribe() { if (this.subscribed) { return; } this.subscriptionPending = true; this.subscriptionCancelled = false; - this.authorize(this.pusher.connection.socket_id, function (error, data) { + this.authorize(this.pusher.connection.socket_id, (error, data) => { if (error) { - _this.subscriptionPending = false; + this.subscriptionPending = false; logger.error(error.toString()); - _this.emit('pusher:subscription_error', Object.assign({}, { + this.emit('pusher:subscription_error', Object.assign({}, { type: 'AuthError', error: error.message }, error instanceof HTTPAuthError ? { status: error.status } : {})); } else { - _this.pusher.send_event('pusher:subscribe', { + this.pusher.send_event('pusher:subscribe', { auth: data.auth, channel_data: data.channel_data, - channel: _this.name + channel: this.name }); } }); - }; - Channel.prototype.unsubscribe = function () { + } + unsubscribe() { this.subscribed = false; this.pusher.send_event('pusher:unsubscribe', { channel: this.name }); - }; - Channel.prototype.cancelSubscription = function () { + } + cancelSubscription() { this.subscriptionCancelled = true; - }; - Channel.prototype.reinstateSubscription = function () { + } + reinstateSubscription() { this.subscriptionCancelled = false; - }; - return Channel; -}(dispatcher)); -/* harmony default export */ var channels_channel = (channel_Channel); + } +} // CONCATENATED MODULE: ./src/core/channels/private_channel.ts -var private_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var PrivateChannel = (function (_super) { - private_channel_extends(PrivateChannel, _super); - function PrivateChannel() { - return _super !== null && _super.apply(this, arguments) || this; - } - PrivateChannel.prototype.authorize = function (socketId, callback) { +class private_channel_PrivateChannel extends channel_Channel { + authorize(socketId, callback) { return this.pusher.config.channelAuthorizer({ channelName: this.name, socketId: socketId }, callback); - }; - return PrivateChannel; -}(channels_channel)); -/* harmony default export */ var private_channel = (PrivateChannel); + } +} // CONCATENATED MODULE: ./src/core/channels/members.ts -var members_Members = (function () { - function Members() { +class members_Members { + constructor() { this.reset(); } - Members.prototype.get = function (id) { + get(id) { if (Object.prototype.hasOwnProperty.call(this.members, id)) { return { id: id, @@ -4439,60 +4249,44 @@ var members_Members = (function () { else { return null; } - }; - Members.prototype.each = function (callback) { - var _this = this; - objectApply(this.members, function (member, id) { - callback(_this.get(id)); + } + each(callback) { + objectApply(this.members, (member, id) => { + callback(this.get(id)); }); - }; - Members.prototype.setMyID = function (id) { + } + setMyID(id) { this.myID = id; - }; - Members.prototype.onSubscription = function (subscriptionData) { + } + onSubscription(subscriptionData) { this.members = subscriptionData.presence.hash; this.count = subscriptionData.presence.count; this.me = this.get(this.myID); - }; - Members.prototype.addMember = function (memberData) { + } + addMember(memberData) { if (this.get(memberData.user_id) === null) { this.count++; } this.members[memberData.user_id] = memberData.user_info; return this.get(memberData.user_id); - }; - Members.prototype.removeMember = function (memberData) { + } + removeMember(memberData) { var member = this.get(memberData.user_id); if (member) { delete this.members[memberData.user_id]; this.count--; } return member; - }; - Members.prototype.reset = function () { + } + reset() { this.members = {}; this.count = 0; this.myID = null; this.me = null; - }; - return Members; -}()); -/* harmony default export */ var members = (members_Members); + } +} // CONCATENATED MODULE: ./src/core/channels/presence_channel.ts -var presence_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -4502,80 +4296,42 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = (undefined && undefined.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var presence_channel_PresenceChannel = (function (_super) { - presence_channel_extends(PresenceChannel, _super); - function PresenceChannel(name, pusher) { - var _this = _super.call(this, name, pusher) || this; - _this.members = new members(); - return _this; - } - PresenceChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { return __awaiter(_this, void 0, void 0, function () { - var channelData, suffix; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!!error) return [3, 3]; - authData = authData; - if (!(authData.channel_data != null)) return [3, 1]; - channelData = JSON.parse(authData.channel_data); - this.members.setMyID(channelData.user_id); - return [3, 3]; - case 1: return [4, this.pusher.user.signinDonePromise]; - case 2: - _a.sent(); - if (this.pusher.user.user_data != null) { - this.members.setMyID(this.pusher.user.user_data.id); - } - else { - suffix = url_store.buildLogSuffix('authorizationEndpoint'); - logger.error("Invalid auth response for channel '" + this.name + "', " + - ("expected 'channel_data' field. " + suffix + ", ") + - "or the user should be signed in."); - callback('Invalid auth response'); - return [2]; - } - _a.label = 3; - case 3: - callback(error, authData); - return [2]; +class presence_channel_PresenceChannel extends private_channel_PrivateChannel { + constructor(name, pusher) { + super(name, pusher); + this.members = new members_Members(); + } + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () { + if (!error) { + authData = authData; + if (authData.channel_data != null) { + var channelData = JSON.parse(authData.channel_data); + this.members.setMyID(channelData.user_id); } - }); - }); }); - }; - PresenceChannel.prototype.handleEvent = function (event) { + else { + yield this.pusher.user.signinDonePromise; + if (this.pusher.user.user_data != null) { + this.members.setMyID(this.pusher.user.user_data.id); + } + else { + let suffix = url_store.buildLogSuffix('authorizationEndpoint'); + logger.error(`Invalid auth response for channel '${this.name}', ` + + `expected 'channel_data' field. ${suffix}, ` + + `or the user should be signed in.`); + callback('Invalid auth response'); + return; + } + } + } + callback(error, authData); + })); + } + handleEvent(event) { var eventName = event.event; if (eventName.indexOf('pusher_internal:') === 0) { this.handleInternalEvent(event); @@ -4588,8 +4344,8 @@ var presence_channel_PresenceChannel = (function (_super) { } this.emit(eventName, data, metadata); } - }; - PresenceChannel.prototype.handleInternalEvent = function (event) { + } + handleInternalEvent(event) { var eventName = event.event; var data = event.data; switch (eventName) { @@ -4610,8 +4366,8 @@ var presence_channel_PresenceChannel = (function (_super) { } break; } - }; - PresenceChannel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -4621,14 +4377,12 @@ var presence_channel_PresenceChannel = (function (_super) { this.members.onSubscription(event.data); this.emit('pusher:subscription_succeeded', this.members); } - }; - PresenceChannel.prototype.disconnect = function () { + } + disconnect() { this.members.reset(); - _super.prototype.disconnect.call(this); - }; - return PresenceChannel; -}(private_channel)); -/* harmony default export */ var presence_channel = (presence_channel_PresenceChannel); + super.disconnect(); + } +} // EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js var utf8 = __webpack_require__(1); @@ -4637,64 +4391,47 @@ var utf8 = __webpack_require__(1); var base64 = __webpack_require__(0); // CONCATENATED MODULE: ./src/core/channels/encrypted_channel.ts -var encrypted_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var encrypted_channel_EncryptedChannel = (function (_super) { - encrypted_channel_extends(EncryptedChannel, _super); - function EncryptedChannel(name, pusher, nacl) { - var _this = _super.call(this, name, pusher) || this; - _this.key = null; - _this.nacl = nacl; - return _this; +class encrypted_channel_EncryptedChannel extends private_channel_PrivateChannel { + constructor(name, pusher, nacl) { + super(name, pusher); + this.key = null; + this.nacl = nacl; } - EncryptedChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => { if (error) { callback(error, authData); return; } - var sharedSecret = authData['shared_secret']; + let sharedSecret = authData['shared_secret']; if (!sharedSecret) { - callback(new Error("No shared_secret key in auth payload for encrypted channel: " + _this.name), null); + callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null); return; } - _this.key = Object(base64["decode"])(sharedSecret); + this.key = Object(base64["decode"])(sharedSecret); delete authData['shared_secret']; callback(null, authData); }); - }; - EncryptedChannel.prototype.trigger = function (event, data) { + } + trigger(event, data) { throw new UnsupportedFeature('Client events are not currently supported for encrypted channels'); - }; - EncryptedChannel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { - _super.prototype.handleEvent.call(this, event); + super.handleEvent(event); return; } this.handleEncryptedEvent(eventName, data); - }; - EncryptedChannel.prototype.handleEncryptedEvent = function (event, data) { - var _this = this; + } + handleEncryptedEvent(event, data) { if (!this.key) { logger.debug('Received encrypted event before key has been retrieved from the authEndpoint'); return; @@ -4704,98 +4441,81 @@ var encrypted_channel_EncryptedChannel = (function (_super) { data); return; } - var cipherText = Object(base64["decode"])(data.ciphertext); + let cipherText = Object(base64["decode"])(data.ciphertext); if (cipherText.length < this.nacl.secretbox.overheadLength) { - logger.error("Expected encrypted event ciphertext length to be " + this.nacl.secretbox.overheadLength + ", got: " + cipherText.length); + logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`); return; } - var nonce = Object(base64["decode"])(data.nonce); + let nonce = Object(base64["decode"])(data.nonce); if (nonce.length < this.nacl.secretbox.nonceLength) { - logger.error("Expected encrypted event nonce length to be " + this.nacl.secretbox.nonceLength + ", got: " + nonce.length); + logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`); return; } - var bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); + let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'); - this.authorize(this.pusher.connection.socket_id, function (error, authData) { + this.authorize(this.pusher.connection.socket_id, (error, authData) => { if (error) { - logger.error("Failed to make a request to the authEndpoint: " + authData + ". Unable to fetch new key, so dropping encrypted event"); + logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`); return; } - bytes = _this.nacl.secretbox.open(cipherText, nonce, _this.key); + bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { - logger.error("Failed to decrypt event with new key. Dropping encrypted event"); + logger.error(`Failed to decrypt event with new key. Dropping encrypted event`); return; } - _this.emit(event, _this.getDataToEmit(bytes)); + this.emit(event, this.getDataToEmit(bytes)); return; }); return; } this.emit(event, this.getDataToEmit(bytes)); - }; - EncryptedChannel.prototype.getDataToEmit = function (bytes) { - var raw = Object(utf8["decode"])(bytes); + } + getDataToEmit(bytes) { + let raw = Object(utf8["decode"])(bytes); try { return JSON.parse(raw); } catch (_a) { return raw; } - }; - return EncryptedChannel; -}(private_channel)); -/* harmony default export */ var encrypted_channel = (encrypted_channel_EncryptedChannel); + } +} // CONCATENATED MODULE: ./src/core/connection/connection_manager.ts -var connection_manager_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_manager_ConnectionManager = (function (_super) { - connection_manager_extends(ConnectionManager, _super); - function ConnectionManager(key, options) { - var _this = _super.call(this) || this; - _this.state = 'initialized'; - _this.connection = null; - _this.key = key; - _this.options = options; - _this.timeline = _this.options.timeline; - _this.usingTLS = _this.options.useTLS; - _this.errorCallbacks = _this.buildErrorCallbacks(); - _this.connectionCallbacks = _this.buildConnectionCallbacks(_this.errorCallbacks); - _this.handshakeCallbacks = _this.buildHandshakeCallbacks(_this.errorCallbacks); +class connection_manager_ConnectionManager extends dispatcher_Dispatcher { + constructor(key, options) { + super(); + this.state = 'initialized'; + this.connection = null; + this.key = key; + this.options = options; + this.timeline = this.options.timeline; + this.usingTLS = this.options.useTLS; + this.errorCallbacks = this.buildErrorCallbacks(); + this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks); + this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks); var Network = worker_runtime.getNetwork(); - Network.bind('online', function () { - _this.timeline.info({ netinfo: 'online' }); - if (_this.state === 'connecting' || _this.state === 'unavailable') { - _this.retryIn(0); + Network.bind('online', () => { + this.timeline.info({ netinfo: 'online' }); + if (this.state === 'connecting' || this.state === 'unavailable') { + this.retryIn(0); } }); - Network.bind('offline', function () { - _this.timeline.info({ netinfo: 'offline' }); - if (_this.connection) { - _this.sendActivityCheck(); + Network.bind('offline', () => { + this.timeline.info({ netinfo: 'offline' }); + if (this.connection) { + this.sendActivityCheck(); } }); - _this.updateStrategy(); - return _this; + this.updateStrategy(); } - ConnectionManager.prototype.connect = function () { + connect() { if (this.connection || this.runner) { return; } @@ -4806,59 +4526,58 @@ var connection_manager_ConnectionManager = (function (_super) { this.updateState('connecting'); this.startConnecting(); this.setUnavailableTimer(); - }; - ConnectionManager.prototype.send = function (data) { + } + send(data) { if (this.connection) { return this.connection.send(data); } else { return false; } - }; - ConnectionManager.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { if (this.connection) { return this.connection.send_event(name, data, channel); } else { return false; } - }; - ConnectionManager.prototype.disconnect = function () { + } + disconnect() { this.disconnectInternally(); this.updateState('disconnected'); - }; - ConnectionManager.prototype.isUsingTLS = function () { + } + isUsingTLS() { return this.usingTLS; - }; - ConnectionManager.prototype.startConnecting = function () { - var _this = this; - var callback = function (error, handshake) { + } + startConnecting() { + var callback = (error, handshake) => { if (error) { - _this.runner = _this.strategy.connect(0, callback); + this.runner = this.strategy.connect(0, callback); } else { if (handshake.action === 'error') { - _this.emit('error', { + this.emit('error', { type: 'HandshakeError', error: handshake.error }); - _this.timeline.error({ handshakeError: handshake.error }); + this.timeline.error({ handshakeError: handshake.error }); } else { - _this.abortConnecting(); - _this.handshakeCallbacks[handshake.action](handshake); + this.abortConnecting(); + this.handshakeCallbacks[handshake.action](handshake); } } }; this.runner = this.strategy.connect(0, callback); - }; - ConnectionManager.prototype.abortConnecting = function () { + } + abortConnecting() { if (this.runner) { this.runner.abort(); this.runner = null; } - }; - ConnectionManager.prototype.disconnectInternally = function () { + } + disconnectInternally() { this.abortConnecting(); this.clearRetryTimer(); this.clearUnavailableTimer(); @@ -4866,136 +4585,129 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.abandonConnection(); connection.close(); } - }; - ConnectionManager.prototype.updateStrategy = function () { + } + updateStrategy() { this.strategy = this.options.getStrategy({ key: this.key, timeline: this.timeline, useTLS: this.usingTLS }); - }; - ConnectionManager.prototype.retryIn = function (delay) { - var _this = this; + } + retryIn(delay) { this.timeline.info({ action: 'retry', delay: delay }); if (delay > 0) { this.emit('connecting_in', Math.round(delay / 1000)); } - this.retryTimer = new OneOffTimer(delay || 0, function () { - _this.disconnectInternally(); - _this.connect(); + this.retryTimer = new timers_OneOffTimer(delay || 0, () => { + this.disconnectInternally(); + this.connect(); }); - }; - ConnectionManager.prototype.clearRetryTimer = function () { + } + clearRetryTimer() { if (this.retryTimer) { this.retryTimer.ensureAborted(); this.retryTimer = null; } - }; - ConnectionManager.prototype.setUnavailableTimer = function () { - var _this = this; - this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, function () { - _this.updateState('unavailable'); + } + setUnavailableTimer() { + this.unavailableTimer = new timers_OneOffTimer(this.options.unavailableTimeout, () => { + this.updateState('unavailable'); }); - }; - ConnectionManager.prototype.clearUnavailableTimer = function () { + } + clearUnavailableTimer() { if (this.unavailableTimer) { this.unavailableTimer.ensureAborted(); } - }; - ConnectionManager.prototype.sendActivityCheck = function () { - var _this = this; + } + sendActivityCheck() { this.stopActivityCheck(); this.connection.ping(); - this.activityTimer = new OneOffTimer(this.options.pongTimeout, function () { - _this.timeline.error({ pong_timed_out: _this.options.pongTimeout }); - _this.retryIn(0); + this.activityTimer = new timers_OneOffTimer(this.options.pongTimeout, () => { + this.timeline.error({ pong_timed_out: this.options.pongTimeout }); + this.retryIn(0); }); - }; - ConnectionManager.prototype.resetActivityCheck = function () { - var _this = this; + } + resetActivityCheck() { this.stopActivityCheck(); if (this.connection && !this.connection.handlesActivityChecks()) { - this.activityTimer = new OneOffTimer(this.activityTimeout, function () { - _this.sendActivityCheck(); + this.activityTimer = new timers_OneOffTimer(this.activityTimeout, () => { + this.sendActivityCheck(); }); } - }; - ConnectionManager.prototype.stopActivityCheck = function () { + } + stopActivityCheck() { if (this.activityTimer) { this.activityTimer.ensureAborted(); } - }; - ConnectionManager.prototype.buildConnectionCallbacks = function (errorCallbacks) { - var _this = this; + } + buildConnectionCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - message: function (message) { - _this.resetActivityCheck(); - _this.emit('message', message); + message: message => { + this.resetActivityCheck(); + this.emit('message', message); }, - ping: function () { - _this.send_event('pusher:pong', {}); + ping: () => { + this.send_event('pusher:pong', {}); }, - activity: function () { - _this.resetActivityCheck(); + activity: () => { + this.resetActivityCheck(); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function () { - _this.abandonConnection(); - if (_this.shouldRetry()) { - _this.retryIn(1000); + closed: () => { + this.abandonConnection(); + if (this.shouldRetry()) { + this.retryIn(1000); } } }); - }; - ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) { - var _this = this; + } + buildHandshakeCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - connected: function (handshake) { - _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); - _this.clearUnavailableTimer(); - _this.setConnection(handshake.connection); - _this.socket_id = _this.connection.id; - _this.updateState('connected', { socket_id: _this.socket_id }); + connected: (handshake) => { + this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); + this.clearUnavailableTimer(); + this.setConnection(handshake.connection); + this.socket_id = this.connection.id; + this.updateState('connected', { socket_id: this.socket_id }); } }); - }; - ConnectionManager.prototype.buildErrorCallbacks = function () { - var _this = this; - var withErrorEmitted = function (callback) { - return function (result) { + } + buildErrorCallbacks() { + let withErrorEmitted = callback => { + return (result) => { if (result.error) { - _this.emit('error', { type: 'WebSocketError', error: result.error }); + this.emit('error', { type: 'WebSocketError', error: result.error }); } callback(result); }; }; return { - tls_only: withErrorEmitted(function () { - _this.usingTLS = true; - _this.updateStrategy(); - _this.retryIn(0); + tls_only: withErrorEmitted(() => { + this.usingTLS = true; + this.updateStrategy(); + this.retryIn(0); }), - refused: withErrorEmitted(function () { - _this.disconnect(); + refused: withErrorEmitted(() => { + this.disconnect(); }), - backoff: withErrorEmitted(function () { - _this.retryIn(1000); + backoff: withErrorEmitted(() => { + this.retryIn(1000); }), - retry: withErrorEmitted(function () { - _this.retryIn(0); + retry: withErrorEmitted(() => { + this.retryIn(0); }) }; - }; - ConnectionManager.prototype.setConnection = function (connection) { + } + setConnection(connection) { this.connection = connection; for (var event in this.connectionCallbacks) { this.connection.bind(event, this.connectionCallbacks[event]); } this.resetActivityCheck(); - }; - ConnectionManager.prototype.abandonConnection = function () { + } + abandonConnection() { if (!this.connection) { return; } @@ -5006,8 +4718,8 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.connection; this.connection = null; return connection; - }; - ConnectionManager.prototype.updateState = function (newState, data) { + } + updateState(newState, data) { var previousState = this.state; this.state = newState; if (previousState !== newState) { @@ -5020,56 +4732,52 @@ var connection_manager_ConnectionManager = (function (_super) { this.emit('state_change', { previous: previousState, current: newState }); this.emit(newState, data); } - }; - ConnectionManager.prototype.shouldRetry = function () { + } + shouldRetry() { return this.state === 'connecting' || this.state === 'connected'; - }; - return ConnectionManager; -}(dispatcher)); -/* harmony default export */ var connection_manager = (connection_manager_ConnectionManager); + } +} // CONCATENATED MODULE: ./src/core/channels/channels.ts -var channels_Channels = (function () { - function Channels() { +class channels_Channels { + constructor() { this.channels = {}; } - Channels.prototype.add = function (name, pusher) { + add(name, pusher) { if (!this.channels[name]) { this.channels[name] = createChannel(name, pusher); } return this.channels[name]; - }; - Channels.prototype.all = function () { + } + all() { return values(this.channels); - }; - Channels.prototype.find = function (name) { + } + find(name) { return this.channels[name]; - }; - Channels.prototype.remove = function (name) { + } + remove(name) { var channel = this.channels[name]; delete this.channels[name]; return channel; - }; - Channels.prototype.disconnect = function () { + } + disconnect() { objectApply(this.channels, function (channel) { channel.disconnect(); }); - }; - return Channels; -}()); -/* harmony default export */ var channels = (channels_Channels); + } +} function createChannel(name, pusher) { if (name.indexOf('private-encrypted-') === 0) { if (pusher.config.nacl) { return factory.createEncryptedChannel(name, pusher, pusher.config.nacl); } - var errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; - var suffix = url_store.buildLogSuffix('encryptedChannelSupport'); - throw new UnsupportedFeature(errMsg + ". " + suffix); + let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; + let suffix = url_store.buildLogSuffix('encryptedChannelSupport'); + throw new UnsupportedFeature(`${errMsg}. ${suffix}`); } else if (name.indexOf('private-') === 0) { return factory.createPrivateChannel(name, pusher); @@ -5096,97 +4804,94 @@ function createChannel(name, pusher) { var Factory = { - createChannels: function () { - return new channels(); + createChannels() { + return new channels_Channels(); }, - createConnectionManager: function (key, options) { - return new connection_manager(key, options); + createConnectionManager(key, options) { + return new connection_manager_ConnectionManager(key, options); }, - createChannel: function (name, pusher) { - return new channels_channel(name, pusher); + createChannel(name, pusher) { + return new channel_Channel(name, pusher); }, - createPrivateChannel: function (name, pusher) { - return new private_channel(name, pusher); + createPrivateChannel(name, pusher) { + return new private_channel_PrivateChannel(name, pusher); }, - createPresenceChannel: function (name, pusher) { - return new presence_channel(name, pusher); + createPresenceChannel(name, pusher) { + return new presence_channel_PresenceChannel(name, pusher); }, - createEncryptedChannel: function (name, pusher, nacl) { - return new encrypted_channel(name, pusher, nacl); + createEncryptedChannel(name, pusher, nacl) { + return new encrypted_channel_EncryptedChannel(name, pusher, nacl); }, - createTimelineSender: function (timeline, options) { - return new timeline_sender(timeline, options); + createTimelineSender(timeline, options) { + return new timeline_sender_TimelineSender(timeline, options); }, - createHandshake: function (transport, callback) { - return new connection_handshake(transport, callback); + createHandshake(transport, callback) { + return new handshake_Handshake(transport, callback); }, - createAssistantToTheTransportManager: function (manager, transport, options) { - return new assistant_to_the_transport_manager(manager, transport, options); + createAssistantToTheTransportManager(manager, transport, options) { + return new assistant_to_the_transport_manager_AssistantToTheTransportManager(manager, transport, options); } }; /* harmony default export */ var factory = (Factory); // CONCATENATED MODULE: ./src/core/transports/transport_manager.ts -var transport_manager_TransportManager = (function () { - function TransportManager(options) { +class transport_manager_TransportManager { + constructor(options) { this.options = options || {}; this.livesLeft = this.options.lives || Infinity; } - TransportManager.prototype.getAssistant = function (transport) { + getAssistant(transport) { return factory.createAssistantToTheTransportManager(this, transport, { minPingDelay: this.options.minPingDelay, maxPingDelay: this.options.maxPingDelay }); - }; - TransportManager.prototype.isAlive = function () { + } + isAlive() { return this.livesLeft > 0; - }; - TransportManager.prototype.reportDeath = function () { + } + reportDeath() { this.livesLeft -= 1; - }; - return TransportManager; -}()); -/* harmony default export */ var transport_manager = (transport_manager_TransportManager); + } +} // CONCATENATED MODULE: ./src/core/strategies/sequential_strategy.ts -var sequential_strategy_SequentialStrategy = (function () { - function SequentialStrategy(strategies, options) { +class sequential_strategy_SequentialStrategy { + constructor(strategies, options) { this.strategies = strategies; this.loop = Boolean(options.loop); this.failFast = Boolean(options.failFast); this.timeout = options.timeout; this.timeoutLimit = options.timeoutLimit; } - SequentialStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - SequentialStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { var strategies = this.strategies; var current = 0; var timeout = this.timeout; var runner = null; - var tryNextStrategy = function (error, handshake) { + var tryNextStrategy = (error, handshake) => { if (handshake) { callback(null, handshake); } else { current = current + 1; - if (_this.loop) { + if (this.loop) { current = current % strategies.length; } if (current < strategies.length) { if (timeout) { timeout = timeout * 2; - if (_this.timeoutLimit) { - timeout = Math.min(timeout, _this.timeoutLimit); + if (this.timeoutLimit) { + timeout = Math.min(timeout, this.timeoutLimit); } } - runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy); + runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy); } else { callback(true); @@ -5205,12 +4910,12 @@ var sequential_strategy_SequentialStrategy = (function () { } } }; - }; - SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) { + } + tryStrategy(strategy, minPriority, options, callback) { var timer = null; var runner = null; if (options.timeout > 0) { - timer = new OneOffTimer(options.timeout, function () { + timer = new timers_OneOffTimer(options.timeout, function () { runner.abort(); callback(true); }); @@ -5235,22 +4940,20 @@ var sequential_strategy_SequentialStrategy = (function () { runner.forceMinPriority(p); } }; - }; - return SequentialStrategy; -}()); -/* harmony default export */ var sequential_strategy = (sequential_strategy_SequentialStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/best_connected_ever_strategy.ts -var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { - function BestConnectedEverStrategy(strategies) { +class best_connected_ever_strategy_BestConnectedEverStrategy { + constructor(strategies) { this.strategies = strategies; } - BestConnectedEverStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { return connect(this.strategies, minPriority, function (i, runners) { return function (error, handshake) { runners[i].error = error; @@ -5266,10 +4969,8 @@ var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { callback(null, handshake); }; }); - }; - return BestConnectedEverStrategy; -}()); -/* harmony default export */ var best_connected_ever_strategy = (best_connected_ever_strategy_BestConnectedEverStrategy); + } +} function connect(strategies, minPriority, callbackBuilder) { var runners = map(strategies, function (strategy, i, _, rs) { return strategy.connect(minPriority, callbackBuilder(i, rs)); @@ -5302,18 +5003,18 @@ function abortRunner(runner) { -var cached_strategy_CachedStrategy = (function () { - function CachedStrategy(strategy, transports, options) { +class cached_strategy_CachedStrategy { + constructor(strategy, transports, options) { this.strategy = strategy; this.transports = transports; this.ttl = options.ttl || 1800 * 1000; this.usingTLS = options.useTLS; this.timeline = options.timeline; } - CachedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - CachedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var usingTLS = this.usingTLS; var info = fetchTransportCache(usingTLS); var strategies = [this.strategy]; @@ -5325,7 +5026,7 @@ var cached_strategy_CachedStrategy = (function () { transport: info.transport, latency: info.latency }); - strategies.push(new sequential_strategy([transport], { + strategies.push(new sequential_strategy_SequentialStrategy([transport], { timeout: info.latency * 2 + 1000, failFast: true })); @@ -5361,10 +5062,8 @@ var cached_strategy_CachedStrategy = (function () { } } }; - }; - return CachedStrategy; -}()); -/* harmony default export */ var cached_strategy = (cached_strategy_CachedStrategy); + } +} function getTransportCacheKey(usingTLS) { return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS'); } @@ -5410,19 +5109,18 @@ function flushTransportCache(usingTLS) { // CONCATENATED MODULE: ./src/core/strategies/delayed_strategy.ts -var delayed_strategy_DelayedStrategy = (function () { - function DelayedStrategy(strategy, _a) { - var number = _a.delay; +class delayed_strategy_DelayedStrategy { + constructor(strategy, { delay: number }) { this.strategy = strategy; this.options = { delay: number }; } - DelayedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - DelayedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var strategy = this.strategy; var runner; - var timer = new OneOffTimer(this.options.delay, function () { + var timer = new timers_OneOffTimer(this.options.delay, function () { runner = strategy.connect(minPriority, callback); }); return { @@ -5439,39 +5137,35 @@ var delayed_strategy_DelayedStrategy = (function () { } } }; - }; - return DelayedStrategy; -}()); -/* harmony default export */ var delayed_strategy = (delayed_strategy_DelayedStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/if_strategy.ts -var IfStrategy = (function () { - function IfStrategy(test, trueBranch, falseBranch) { +class IfStrategy { + constructor(test, trueBranch, falseBranch) { this.test = test; this.trueBranch = trueBranch; this.falseBranch = falseBranch; } - IfStrategy.prototype.isSupported = function () { + isSupported() { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.isSupported(); - }; - IfStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.connect(minPriority, callback); - }; - return IfStrategy; -}()); -/* harmony default export */ var if_strategy = (IfStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/first_connected_strategy.ts -var FirstConnectedStrategy = (function () { - function FirstConnectedStrategy(strategy) { +class FirstConnectedStrategy { + constructor(strategy) { this.strategy = strategy; } - FirstConnectedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - FirstConnectedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var runner = this.strategy.connect(minPriority, function (error, handshake) { if (handshake) { runner.abort(); @@ -5479,10 +5173,8 @@ var FirstConnectedStrategy = (function () { callback(error, handshake); }); return runner; - }; - return FirstConnectedStrategy; -}()); -/* harmony default export */ var first_connected_strategy = (FirstConnectedStrategy); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/default_strategy.ts @@ -5523,12 +5215,12 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { timeout: 15000, timeoutLimit: 60000 }; - var ws_manager = new transport_manager({ + var ws_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout }); - var streaming_manager = new transport_manager({ + var streaming_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout @@ -5537,31 +5229,31 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { var wss_transport = defineTransportStrategy('wss', 'ws', 3, wss_options, ws_manager); var xhr_streaming_transport = defineTransportStrategy('xhr_streaming', 'xhr_streaming', 1, http_options, streaming_manager); var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, http_options); - var ws_loop = new sequential_strategy([ws_transport], timeouts); - var wss_loop = new sequential_strategy([wss_transport], timeouts); - var streaming_loop = new sequential_strategy([xhr_streaming_transport], timeouts); - var polling_loop = new sequential_strategy([xhr_polling_transport], timeouts); - var http_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy([ + var ws_loop = new sequential_strategy_SequentialStrategy([ws_transport], timeouts); + var wss_loop = new sequential_strategy_SequentialStrategy([wss_transport], timeouts); + var streaming_loop = new sequential_strategy_SequentialStrategy([xhr_streaming_transport], timeouts); + var polling_loop = new sequential_strategy_SequentialStrategy([xhr_polling_transport], timeouts); + var http_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy_BestConnectedEverStrategy([ streaming_loop, - new delayed_strategy(polling_loop, { delay: 4000 }) + new delayed_strategy_DelayedStrategy(polling_loop, { delay: 4000 }) ]), polling_loop) ], timeouts); var wsStrategy; if (baseOptions.useTLS) { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(http_loop, { delay: 2000 }) + new delayed_strategy_DelayedStrategy(http_loop, { delay: 2000 }) ]); } else { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(wss_loop, { delay: 2000 }), - new delayed_strategy(http_loop, { delay: 5000 }) + new delayed_strategy_DelayedStrategy(wss_loop, { delay: 2000 }), + new delayed_strategy_DelayedStrategy(http_loop, { delay: 5000 }) ]); } - return new cached_strategy(new first_connected_strategy(new if_strategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { + return new cached_strategy_CachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { ttl: 1800000, timeline: baseOptions.timeline, useTLS: baseOptions.useTLS @@ -5584,37 +5276,21 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { }); // CONCATENATED MODULE: ./src/core/http/http_request.ts -var http_request_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MAX_BUFFER_LENGTH = 256 * 1024; -var http_request_HTTPRequest = (function (_super) { - http_request_extends(HTTPRequest, _super); - function HTTPRequest(hooks, method, url) { - var _this = _super.call(this) || this; - _this.hooks = hooks; - _this.method = method; - _this.url = url; - return _this; +const MAX_BUFFER_LENGTH = 256 * 1024; +class http_request_HTTPRequest extends dispatcher_Dispatcher { + constructor(hooks, method, url) { + super(); + this.hooks = hooks; + this.method = method; + this.url = url; } - HTTPRequest.prototype.start = function (payload) { - var _this = this; + start(payload) { this.position = 0; this.xhr = this.hooks.getRequest(this); - this.unloader = function () { - _this.close(); + this.unloader = () => { + this.close(); }; worker_runtime.addUnloadListener(this.unloader); this.xhr.open(this.method, this.url, true); @@ -5622,8 +5298,8 @@ var http_request_HTTPRequest = (function (_super) { this.xhr.setRequestHeader('Content-Type', 'application/json'); } this.xhr.send(payload); - }; - HTTPRequest.prototype.close = function () { + } + close() { if (this.unloader) { worker_runtime.removeUnloadListener(this.unloader); this.unloader = null; @@ -5632,8 +5308,8 @@ var http_request_HTTPRequest = (function (_super) { this.hooks.abortRequest(this.xhr); this.xhr = null; } - }; - HTTPRequest.prototype.onChunk = function (status, data) { + } + onChunk(status, data) { while (true) { var chunk = this.advanceBuffer(data); if (chunk) { @@ -5646,8 +5322,8 @@ var http_request_HTTPRequest = (function (_super) { if (this.isBufferTooLong(data)) { this.emit('buffer_too_long'); } - }; - HTTPRequest.prototype.advanceBuffer = function (buffer) { + } + advanceBuffer(buffer) { var unreadData = buffer.slice(this.position); var endOfLinePosition = unreadData.indexOf('\n'); if (endOfLinePosition !== -1) { @@ -5657,13 +5333,11 @@ var http_request_HTTPRequest = (function (_super) { else { return null; } - }; - HTTPRequest.prototype.isBufferTooLong = function (buffer) { + } + isBufferTooLong(buffer) { return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH; - }; - return HTTPRequest; -}(dispatcher)); -/* harmony default export */ var http_request = (http_request_HTTPRequest); + } +} // CONCATENATED MODULE: ./src/core/http/state.ts var State; @@ -5679,24 +5353,24 @@ var State; var autoIncrement = 1; -var http_socket_HTTPSocket = (function () { - function HTTPSocket(hooks, url) { +class http_socket_HTTPSocket { + constructor(hooks, url) { this.hooks = hooks; this.session = randomNumber(1000) + '/' + randomString(8); this.location = getLocation(url); this.readyState = state.CONNECTING; this.openStream(); } - HTTPSocket.prototype.send = function (payload) { + send(payload) { return this.sendRaw(JSON.stringify([payload])); - }; - HTTPSocket.prototype.ping = function () { + } + ping() { this.hooks.sendHeartbeat(this); - }; - HTTPSocket.prototype.close = function (code, reason) { + } + close(code, reason) { this.onClose(code, reason, true); - }; - HTTPSocket.prototype.sendRaw = function (payload) { + } + sendRaw(payload) { if (this.readyState === state.OPEN) { try { worker_runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload); @@ -5709,12 +5383,12 @@ var http_socket_HTTPSocket = (function () { else { return false; } - }; - HTTPSocket.prototype.reconnect = function () { + } + reconnect() { this.closeStream(); this.openStream(); - }; - HTTPSocket.prototype.onClose = function (code, reason, wasClean) { + } + onClose(code, reason, wasClean) { this.closeStream(); this.readyState = state.CLOSED; if (this.onclose) { @@ -5724,8 +5398,8 @@ var http_socket_HTTPSocket = (function () { wasClean: wasClean }); } - }; - HTTPSocket.prototype.onChunk = function (chunk) { + } + onChunk(chunk) { if (chunk.status !== 200) { return; } @@ -5757,8 +5431,8 @@ var http_socket_HTTPSocket = (function () { this.onClose(payload[0], payload[1], true); break; } - }; - HTTPSocket.prototype.onOpen = function (options) { + } + onOpen(options) { if (this.readyState === state.CONNECTING) { if (options && options.hostname) { this.location.base = replaceHost(this.location.base, options.hostname); @@ -5771,53 +5445,51 @@ var http_socket_HTTPSocket = (function () { else { this.onClose(1006, 'Server lost session', true); } - }; - HTTPSocket.prototype.onEvent = function (event) { + } + onEvent(event) { if (this.readyState === state.OPEN && this.onmessage) { this.onmessage({ data: event }); } - }; - HTTPSocket.prototype.onActivity = function () { + } + onActivity() { if (this.onactivity) { this.onactivity(); } - }; - HTTPSocket.prototype.onError = function (error) { + } + onError(error) { if (this.onerror) { this.onerror(error); } - }; - HTTPSocket.prototype.openStream = function () { - var _this = this; + } + openStream() { this.stream = worker_runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))); - this.stream.bind('chunk', function (chunk) { - _this.onChunk(chunk); + this.stream.bind('chunk', chunk => { + this.onChunk(chunk); }); - this.stream.bind('finished', function (status) { - _this.hooks.onFinished(_this, status); + this.stream.bind('finished', status => { + this.hooks.onFinished(this, status); }); - this.stream.bind('buffer_too_long', function () { - _this.reconnect(); + this.stream.bind('buffer_too_long', () => { + this.reconnect(); }); try { this.stream.start(); } catch (error) { - util.defer(function () { - _this.onError(error); - _this.onClose(1006, 'Could not start streaming', false); + util.defer(() => { + this.onError(error); + this.onClose(1006, 'Could not start streaming', false); }); } - }; - HTTPSocket.prototype.closeStream = function () { + } + closeStream() { if (this.stream) { this.stream.unbind_all(); this.stream.close(); this.stream = null; } - }; - return HTTPSocket; -}()); + } +} function getLocation(url) { var parts = /([^\?]*)\/*(\??.*)/.exec(url); return { @@ -5924,20 +5596,20 @@ var http_xhr_request_hooks = { var HTTP = { - createStreamingSocket: function (url) { + createStreamingSocket(url) { return this.createSocket(http_streaming_socket, url); }, - createPollingSocket: function (url) { + createPollingSocket(url) { return this.createSocket(http_polling_socket, url); }, - createSocket: function (hooks, url) { + createSocket(hooks, url) { return new http_socket(hooks, url); }, - createXHR: function (method, url) { + createXHR(method, url) { return this.createRequest(http_xhr_request, method, url); }, - createRequest: function (hooks, method, url) { - return new http_request(hooks, method, url); + createRequest(hooks, method, url) { + return new http_request_HTTPRequest(hooks, method, url); } }; /* harmony default export */ var http_http = (HTTP); @@ -5953,24 +5625,24 @@ var Isomorphic = { Transports: transports, transportConnectionInitializer: transport_connection_initializer, HTTPFactory: http_http, - setup: function (PusherClass) { + setup(PusherClass) { PusherClass.ready(); }, - getLocalStorage: function () { + getLocalStorage() { return undefined; }, - getClientFeatures: function () { + getClientFeatures() { return keys(filterObject({ ws: transports.ws }, function (t) { return t.isSupported({}); })); }, - getProtocol: function () { + getProtocol() { return 'http:'; }, - isXHRSupported: function () { + isXHRSupported() { return true; }, - createSocketRequest: function (method, url) { + createSocketRequest(method, url) { if (this.isXHRSupported()) { return this.HTTPFactory.createXHR(method, url); } @@ -5978,46 +5650,27 @@ var Isomorphic = { throw 'Cross-origin HTTP requests are not supported'; } }, - createXHR: function () { + createXHR() { var Constructor = this.getXHRAPI(); return new Constructor(); }, - createWebSocket: function (url) { + createWebSocket(url) { var Constructor = this.getWebSocketAPI(); return new Constructor(url); }, - addUnloadListener: function (listener) { }, - removeUnloadListener: function (listener) { } + addUnloadListener(listener) { }, + removeUnloadListener(listener) { } }; /* harmony default export */ var runtime = (Isomorphic); // CONCATENATED MODULE: ./src/runtimes/worker/net_info.ts -var net_info_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var NetInfo = (function (_super) { - net_info_extends(NetInfo, _super); - function NetInfo() { - return _super !== null && _super.apply(this, arguments) || this; - } - NetInfo.prototype.isOnline = function () { +class net_info_NetInfo extends dispatcher_Dispatcher { + isOnline() { return true; - }; - return NetInfo; -}(dispatcher)); - -var net_info_Network = new NetInfo(); + } +} +var net_info_Network = new net_info_NetInfo(); // CONCATENATED MODULE: ./src/runtimes/worker/auth/fetch_auth.ts @@ -6028,36 +5681,37 @@ var fetchAuth = function (context, query, authOptions, authRequestType, callback headers.set(headerName, authOptions.headers[headerName]); } if (authOptions.headersProvider != null) { - var dynamicHeaders = authOptions.headersProvider(); + const dynamicHeaders = authOptions.headersProvider(); for (var headerName in dynamicHeaders) { headers.set(headerName, dynamicHeaders[headerName]); } } var body = query; var request = new Request(authOptions.endpoint, { - headers: headers, - body: body, + headers, + body, credentials: 'same-origin', method: 'POST' }); return fetch(request) - .then(function (response) { - var status = response.status; + .then(response => { + let { status } = response; if (status === 200) { return response.text(); } - throw new HTTPAuthError(status, "Could not get " + authRequestType.toString() + " info from your auth endpoint, status: " + status); + throw new HTTPAuthError(status, `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`); }) - .then(function (data) { - var parsedData; + .then(data => { + let parsedData; try { parsedData = JSON.parse(data); } catch (e) { - throw new HTTPAuthError(200, "JSON returned from " + authRequestType.toString() + " endpoint was invalid, yet status code was 200. Data was: " + data); + throw new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`); } callback(null, parsedData); - })["catch"](function (err) { + }) + .catch(err => { callback(err, null); }); }; @@ -6073,25 +5727,25 @@ var getAgent = function (sender, useTLS) { var query = buildQueryString(data); url += '/' + 2 + '?' + query; fetch(url) - .then(function (response) { + .then(response => { if (response.status !== 200) { - throw "received " + response.status + " from stats.pusher.com"; + throw `received ${response.status} from stats.pusher.com`; } return response.json(); }) - .then(function (_a) { - var host = _a.host; + .then(({ host }) => { if (host) { sender.host = host; } - })["catch"](function (err) { + }) + .catch(err => { logger.debug('TimelineSender Error: ', err); }); }; }; var fetchTimeline = { name: 'xhr', - getAgent: getAgent + getAgent }; /* harmony default export */ var fetch_timeline = (fetchTimeline); @@ -6100,38 +5754,38 @@ var fetchTimeline = { -var runtime_getDefaultStrategy = runtime.getDefaultStrategy, runtime_Transports = runtime.Transports, setup = runtime.setup, getProtocol = runtime.getProtocol, isXHRSupported = runtime.isXHRSupported, getLocalStorage = runtime.getLocalStorage, createXHR = runtime.createXHR, createWebSocket = runtime.createWebSocket, addUnloadListener = runtime.addUnloadListener, removeUnloadListener = runtime.removeUnloadListener, transportConnectionInitializer = runtime.transportConnectionInitializer, createSocketRequest = runtime.createSocketRequest, HTTPFactory = runtime.HTTPFactory; -var Worker = { +const { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, setup, getProtocol, isXHRSupported, getLocalStorage, createXHR, createWebSocket, addUnloadListener, removeUnloadListener, transportConnectionInitializer, createSocketRequest, HTTPFactory } = runtime; +const Worker = { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, - setup: setup, - getProtocol: getProtocol, - isXHRSupported: isXHRSupported, - getLocalStorage: getLocalStorage, - createXHR: createXHR, - createWebSocket: createWebSocket, - addUnloadListener: addUnloadListener, - removeUnloadListener: removeUnloadListener, - transportConnectionInitializer: transportConnectionInitializer, - createSocketRequest: createSocketRequest, - HTTPFactory: HTTPFactory, + setup, + getProtocol, + isXHRSupported, + getLocalStorage, + createXHR, + createWebSocket, + addUnloadListener, + removeUnloadListener, + transportConnectionInitializer, + createSocketRequest, + HTTPFactory, TimelineTransport: fetch_timeline, - getAuthorizers: function () { + getAuthorizers() { return { ajax: fetch_auth }; }, - getWebSocketAPI: function () { + getWebSocketAPI() { return WebSocket; }, - getXHRAPI: function () { + getXHRAPI() { return XMLHttpRequest; }, - getNetwork: function () { + getNetwork() { return net_info_Network; }, - randomInt: function (max) { - var random = function () { - var crypto = globalThis.crypto || globalThis['msCrypto']; - var random = crypto.getRandomValues(new Uint32Array(1))[0]; + randomInt(max) { + const random = function () { + const crypto = globalThis.crypto || globalThis['msCrypto']; + const random = crypto.getRandomValues(new Uint32Array(1))[0]; return random / Math.pow(2, 32); }; return Math.floor(random() * max); @@ -6152,8 +5806,8 @@ var TimelineLevel; -var timeline_Timeline = (function () { - function Timeline(key, session, options) { +class timeline_Timeline { + constructor(key, session, options) { this.key = key; this.session = session; this.events = []; @@ -6161,28 +5815,27 @@ var timeline_Timeline = (function () { this.sent = 0; this.uniqueID = 0; } - Timeline.prototype.log = function (level, event) { + log(level, event) { if (level <= this.options.level) { this.events.push(extend({}, event, { timestamp: util.now() })); if (this.options.limit && this.events.length > this.options.limit) { this.events.shift(); } } - }; - Timeline.prototype.error = function (event) { + } + error(event) { this.log(timeline_level.ERROR, event); - }; - Timeline.prototype.info = function (event) { + } + info(event) { this.log(timeline_level.INFO, event); - }; - Timeline.prototype.debug = function (event) { + } + debug(event) { this.log(timeline_level.DEBUG, event); - }; - Timeline.prototype.isEmpty = function () { + } + isEmpty() { return this.events.length === 0; - }; - Timeline.prototype.send = function (sendfn, callback) { - var _this = this; + } + send(sendfn, callback) { var data = extend({ session: this.session, bundle: this.sent + 1, @@ -6194,43 +5847,40 @@ var timeline_Timeline = (function () { timeline: this.events }, this.options.params); this.events = []; - sendfn(data, function (error, result) { + sendfn(data, (error, result) => { if (!error) { - _this.sent++; + this.sent++; } if (callback) { callback(error, result); } }); return true; - }; - Timeline.prototype.generateUniqueID = function () { + } + generateUniqueID() { this.uniqueID++; return this.uniqueID; - }; - return Timeline; -}()); -/* harmony default export */ var timeline_timeline = (timeline_Timeline); + } +} // CONCATENATED MODULE: ./src/core/strategies/transport_strategy.ts -var transport_strategy_TransportStrategy = (function () { - function TransportStrategy(name, priority, transport, options) { +class transport_strategy_TransportStrategy { + constructor(name, priority, transport, options) { this.name = name; this.priority = priority; this.transport = transport; this.options = options || {}; } - TransportStrategy.prototype.isSupported = function () { + isSupported() { return this.transport.isSupported({ useTLS: this.options.useTLS }); - }; - TransportStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { if (!this.isSupported()) { return failAttempt(new UnsupportedStrategy(), callback); } @@ -6273,7 +5923,7 @@ var transport_strategy_TransportStrategy = (function () { transport.bind('closed', onClosed); transport.initialize(); return { - abort: function () { + abort: () => { if (connected) { return; } @@ -6285,11 +5935,11 @@ var transport_strategy_TransportStrategy = (function () { transport.close(); } }, - forceMinPriority: function (p) { + forceMinPriority: p => { if (connected) { return; } - if (_this.priority < p) { + if (this.priority < p) { if (handshake) { handshake.close(); } @@ -6299,10 +5949,8 @@ var transport_strategy_TransportStrategy = (function () { } } }; - }; - return TransportStrategy; -}()); -/* harmony default export */ var transport_strategy = (transport_strategy_TransportStrategy); + } +} function failAttempt(error, callback) { util.defer(function () { callback(error); @@ -6319,7 +5967,7 @@ function failAttempt(error, callback) { -var strategy_builder_Transports = worker_runtime.Transports; +const { Transports: strategy_builder_Transports } = worker_runtime; var strategy_builder_defineTransport = function (config, name, type, priority, options, manager) { var transportClass = strategy_builder_Transports[type]; if (!transportClass) { @@ -6332,7 +5980,7 @@ var strategy_builder_defineTransport = function (config, name, type, priority, o var transport; if (enabled) { options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options); - transport = new transport_strategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); + transport = new transport_strategy_TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); } else { transport = strategy_builder_UnsupportedStrategy; @@ -6380,7 +6028,7 @@ var AuthRequestType; // CONCATENATED MODULE: ./src/core/auth/user_authenticator.ts -var composeChannelQuery = function (params, authOptions) { +const composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); for (var key in authOptions.params) { query += @@ -6390,7 +6038,7 @@ var composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -6401,12 +6049,12 @@ var composeChannelQuery = function (params, authOptions) { } return query; }; -var UserAuthenticator = function (authOptions) { +const UserAuthenticator = (authOptions) => { if (typeof worker_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = composeChannelQuery(params, authOptions); worker_runtime.getAuthorizers()[authOptions.transport](worker_runtime, query, authOptions, AuthRequestType.UserAuthentication, callback); }; }; @@ -6415,7 +6063,7 @@ var UserAuthenticator = function (authOptions) { // CONCATENATED MODULE: ./src/core/auth/channel_authorizer.ts -var channel_authorizer_composeChannelQuery = function (params, authOptions) { +const channel_authorizer_composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); query += '&channel_name=' + encodeURIComponent(params.channelName); for (var key in authOptions.params) { @@ -6426,7 +6074,7 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -6437,20 +6085,20 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { } return query; }; -var ChannelAuthorizer = function (authOptions) { +const ChannelAuthorizer = (authOptions) => { if (typeof worker_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = channel_authorizer_composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = channel_authorizer_composeChannelQuery(params, authOptions); worker_runtime.getAuthorizers()[authOptions.transport](worker_runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback); }; }; /* harmony default export */ var channel_authorizer = (ChannelAuthorizer); // CONCATENATED MODULE: ./src/core/auth/deprecated_channel_authorizer.ts -var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGenerator) { - var deprecatedAuthorizerOptions = { +const ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => { + const deprecatedAuthorizerOptions = { authTransport: authOptions.transport, authEndpoint: authOptions.endpoint, auth: { @@ -6458,32 +6106,21 @@ var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGen headers: authOptions.headers } }; - return function (params, callback) { - var channel = pusher.channel(params.channelName); - var channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); + return (params, callback) => { + const channel = pusher.channel(params.channelName); + const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); channelAuthorizer.authorize(params.socketId, callback); }; }; // CONCATENATED MODULE: ./src/core/config.ts -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; function getConfig(opts, pusher) { - var config = { + let config = { activityTimeout: opts.activityTimeout || defaults.activityTimeout, cluster: opts.cluster, httpPath: opts.httpPath || defaults.httpPath, @@ -6520,7 +6157,7 @@ function getHttpHost(opts) { return opts.httpHost; } if (opts.cluster) { - return "sockjs-" + opts.cluster + ".pusher.com"; + return `sockjs-${opts.cluster}.pusher.com`; } return defaults.httpHost; } @@ -6531,7 +6168,7 @@ function getWebsocketHost(opts) { return getWebsocketHostFromCluster(opts.cluster); } function getWebsocketHostFromCluster(cluster) { - return "ws-" + cluster + ".pusher.com"; + return `ws-${cluster}.pusher.com`; } function shouldUseTLS(opts) { if (worker_runtime.getProtocol() === 'https:') { @@ -6552,7 +6189,7 @@ function getEnableStatsConfig(opts) { return false; } function buildUserAuthenticator(opts) { - var userAuthentication = __assign(__assign({}, defaults.userAuthentication), opts.userAuthentication); + const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication); if ('customHandler' in userAuthentication && userAuthentication['customHandler'] != null) { return userAuthentication['customHandler']; @@ -6560,9 +6197,9 @@ function buildUserAuthenticator(opts) { return user_authenticator(userAuthentication); } function buildChannelAuth(opts, pusher) { - var channelAuthorization; + let channelAuthorization; if ('channelAuthorization' in opts) { - channelAuthorization = __assign(__assign({}, defaults.channelAuthorization), opts.channelAuthorization); + channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization); } else { channelAuthorization = { @@ -6581,7 +6218,7 @@ function buildChannelAuth(opts, pusher) { return channelAuthorization; } function buildChannelAuthorizer(opts, pusher) { - var channelAuthorization = buildChannelAuth(opts, pusher); + const channelAuthorization = buildChannelAuth(opts, pusher); if ('customHandler' in channelAuthorization && channelAuthorization['customHandler'] != null) { return channelAuthorization['customHandler']; @@ -6590,134 +6227,99 @@ function buildChannelAuthorizer(opts, pusher) { } // CONCATENATED MODULE: ./src/core/watchlist.ts -var watchlist_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var watchlist_WatchlistFacade = (function (_super) { - watchlist_extends(WatchlistFacade, _super); - function WatchlistFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { - logger.debug("No callbacks on watchlist events for " + eventName); - }) || this; - _this.pusher = pusher; - _this.bindWatchlistInternalEvent(); - return _this; - } - WatchlistFacade.prototype.handleEvent = function (pusherEvent) { - var _this = this; - pusherEvent.data.events.forEach(function (watchlistEvent) { - _this.emit(watchlistEvent.name, watchlistEvent); +class watchlist_WatchlistFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { + logger.debug(`No callbacks on watchlist events for ${eventName}`); }); - }; - WatchlistFacade.prototype.bindWatchlistInternalEvent = function () { - var _this = this; - this.pusher.connection.bind('message', function (pusherEvent) { + this.pusher = pusher; + this.bindWatchlistInternalEvent(); + } + handleEvent(pusherEvent) { + pusherEvent.data.events.forEach(watchlistEvent => { + this.emit(watchlistEvent.name, watchlistEvent); + }); + } + bindWatchlistInternalEvent() { + this.pusher.connection.bind('message', pusherEvent => { var eventName = pusherEvent.event; if (eventName === 'pusher_internal:watchlist_events') { - _this.handleEvent(pusherEvent); + this.handleEvent(pusherEvent); } }); - }; - return WatchlistFacade; -}(dispatcher)); -/* harmony default export */ var watchlist = (watchlist_WatchlistFacade); + } +} // CONCATENATED MODULE: ./src/core/utils/flat_promise.ts function flatPromise() { - var resolve, reject; - var promise = new Promise(function (res, rej) { + let resolve, reject; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); - return { promise: promise, resolve: resolve, reject: reject }; + return { promise, resolve, reject }; } /* harmony default export */ var flat_promise = (flatPromise); // CONCATENATED MODULE: ./src/core/user.ts -var user_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var user_UserFacade = (function (_super) { - user_extends(UserFacade, _super); - function UserFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { +class user_UserFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { logger.debug('No callbacks on user for ' + eventName); - }) || this; - _this.signin_requested = false; - _this.user_data = null; - _this.serverToUserChannel = null; - _this.signinDonePromise = null; - _this._signinDoneResolve = null; - _this._onAuthorize = function (err, authData) { + }); + this.signin_requested = false; + this.user_data = null; + this.serverToUserChannel = null; + this.signinDonePromise = null; + this._signinDoneResolve = null; + this._onAuthorize = (err, authData) => { if (err) { - logger.warn("Error during signin: " + err); - _this._cleanup(); + logger.warn(`Error during signin: ${err}`); + this._cleanup(); return; } - _this.pusher.send_event('pusher:signin', { + this.pusher.send_event('pusher:signin', { auth: authData.auth, user_data: authData.user_data }); }; - _this.pusher = pusher; - _this.pusher.connection.bind('state_change', function (_a) { - var previous = _a.previous, current = _a.current; + this.pusher = pusher; + this.pusher.connection.bind('state_change', ({ previous, current }) => { if (previous !== 'connected' && current === 'connected') { - _this._signin(); + this._signin(); } if (previous === 'connected' && current !== 'connected') { - _this._cleanup(); - _this._newSigninPromiseIfNeeded(); + this._cleanup(); + this._newSigninPromiseIfNeeded(); } }); - _this.watchlist = new watchlist(pusher); - _this.pusher.connection.bind('message', function (event) { + this.watchlist = new watchlist_WatchlistFacade(pusher); + this.pusher.connection.bind('message', event => { var eventName = event.event; if (eventName === 'pusher:signin_success') { - _this._onSigninSuccess(event.data); + this._onSigninSuccess(event.data); } - if (_this.serverToUserChannel && - _this.serverToUserChannel.name === event.channel) { - _this.serverToUserChannel.handleEvent(event); + if (this.serverToUserChannel && + this.serverToUserChannel.name === event.channel) { + this.serverToUserChannel.handleEvent(event); } }); - return _this; } - UserFacade.prototype.signin = function () { + signin() { if (this.signin_requested) { return; } this.signin_requested = true; this._signin(); - }; - UserFacade.prototype._signin = function () { + } + _signin() { if (!this.signin_requested) { return; } @@ -6728,46 +6330,45 @@ var user_UserFacade = (function (_super) { this.pusher.config.userAuthenticator({ socketId: this.pusher.connection.socket_id }, this._onAuthorize); - }; - UserFacade.prototype._onSigninSuccess = function (data) { + } + _onSigninSuccess(data) { try { this.user_data = JSON.parse(data.user_data); } catch (e) { - logger.error("Failed parsing user data after signin: " + data.user_data); + logger.error(`Failed parsing user data after signin: ${data.user_data}`); this._cleanup(); return; } if (typeof this.user_data.id !== 'string' || this.user_data.id === '') { - logger.error("user_data doesn't contain an id. user_data: " + this.user_data); + logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`); this._cleanup(); return; } this._signinDoneResolve(); this._subscribeChannels(); - }; - UserFacade.prototype._subscribeChannels = function () { - var _this = this; - var ensure_subscribed = function (channel) { + } + _subscribeChannels() { + const ensure_subscribed = channel => { if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); } else if (!channel.subscriptionPending && - _this.pusher.connection.state === 'connected') { + this.pusher.connection.state === 'connected') { channel.subscribe(); } }; - this.serverToUserChannel = new channels_channel("#server-to-user-" + this.user_data.id, this.pusher); - this.serverToUserChannel.bind_global(function (eventName, data) { + this.serverToUserChannel = new channel_Channel(`#server-to-user-${this.user_data.id}`, this.pusher); + this.serverToUserChannel.bind_global((eventName, data) => { if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { return; } - _this.emit(eventName, data); + this.emit(eventName, data); }); ensure_subscribed(this.serverToUserChannel); - }; - UserFacade.prototype._cleanup = function () { + } + _cleanup() { this.user_data = null; if (this.serverToUserChannel) { this.serverToUserChannel.unbind_all(); @@ -6777,26 +6378,24 @@ var user_UserFacade = (function (_super) { if (this.signin_requested) { this._signinDoneResolve(); } - }; - UserFacade.prototype._newSigninPromiseIfNeeded = function () { + } + _newSigninPromiseIfNeeded() { if (!this.signin_requested) { return; } if (this.signinDonePromise && !this.signinDonePromise.done) { return; } - var _a = flat_promise(), promise = _a.promise, resolve = _a.resolve, _ = _a.reject; + const { promise, resolve, reject: _ } = flat_promise(); promise.done = false; - var setDone = function () { + const setDone = () => { promise.done = true; }; - promise.then(setDone)["catch"](setDone); + promise.then(setDone).catch(setDone); this.signinDonePromise = promise; this._signinDoneResolve = resolve; - }; - return UserFacade; -}(dispatcher)); -/* harmony default export */ var user = (user_UserFacade); + } +} // CONCATENATED MODULE: ./src/core/pusher.ts @@ -6812,19 +6411,29 @@ var user_UserFacade = (function (_super) { -var pusher_Pusher = (function () { - function Pusher(app_key, options) { - var _this = this; +class pusher_Pusher { + static ready() { + pusher_Pusher.isReady = true; + for (var i = 0, l = pusher_Pusher.instances.length; i < l; i++) { + pusher_Pusher.instances[i].connect(); + } + } + static getClientFeatures() { + return keys(filterObject({ ws: worker_runtime.Transports.ws }, function (t) { + return t.isSupported({}); + })); + } + constructor(app_key, options) { checkAppKey(app_key); validateOptions(options); this.key = app_key; this.config = getConfig(options, this); this.channels = factory.createChannels(); - this.global_emitter = new dispatcher(); + this.global_emitter = new dispatcher_Dispatcher(); this.sessionID = worker_runtime.randomInt(1000000000); - this.timeline = new timeline_timeline(this.key, this.sessionID, { + this.timeline = new timeline_Timeline(this.key, this.sessionID, { cluster: this.config.cluster, - features: Pusher.getClientFeatures(), + features: pusher_Pusher.getClientFeatures(), params: this.config.timelineParams || {}, limit: 50, level: timeline_level.INFO, @@ -6836,8 +6445,8 @@ var pusher_Pusher = (function () { path: '/timeline/v2/' + worker_runtime.TimelineTransport.name }); } - var getStrategy = function (options) { - return worker_runtime.getDefaultStrategy(_this.config, options, strategy_builder_defineTransport); + var getStrategy = (options) => { + return worker_runtime.getDefaultStrategy(this.config, options, strategy_builder_defineTransport); }; this.connection = factory.createConnectionManager(this.key, { getStrategy: getStrategy, @@ -6847,106 +6456,95 @@ var pusher_Pusher = (function () { unavailableTimeout: this.config.unavailableTimeout, useTLS: Boolean(this.config.useTLS) }); - this.connection.bind('connected', function () { - _this.subscribeAll(); - if (_this.timelineSender) { - _this.timelineSender.send(_this.connection.isUsingTLS()); + this.connection.bind('connected', () => { + this.subscribeAll(); + if (this.timelineSender) { + this.timelineSender.send(this.connection.isUsingTLS()); } }); - this.connection.bind('message', function (event) { + this.connection.bind('message', event => { var eventName = event.event; var internal = eventName.indexOf('pusher_internal:') === 0; if (event.channel) { - var channel = _this.channel(event.channel); + var channel = this.channel(event.channel); if (channel) { channel.handleEvent(event); } } if (!internal) { - _this.global_emitter.emit(event.event, event.data); + this.global_emitter.emit(event.event, event.data); } }); - this.connection.bind('connecting', function () { - _this.channels.disconnect(); + this.connection.bind('connecting', () => { + this.channels.disconnect(); }); - this.connection.bind('disconnected', function () { - _this.channels.disconnect(); + this.connection.bind('disconnected', () => { + this.channels.disconnect(); }); - this.connection.bind('error', function (err) { + this.connection.bind('error', err => { logger.warn(err); }); - Pusher.instances.push(this); - this.timeline.info({ instances: Pusher.instances.length }); - this.user = new user(this); - if (Pusher.isReady) { + pusher_Pusher.instances.push(this); + this.timeline.info({ instances: pusher_Pusher.instances.length }); + this.user = new user_UserFacade(this); + if (pusher_Pusher.isReady) { this.connect(); } } - Pusher.ready = function () { - Pusher.isReady = true; - for (var i = 0, l = Pusher.instances.length; i < l; i++) { - Pusher.instances[i].connect(); - } - }; - Pusher.getClientFeatures = function () { - return keys(filterObject({ ws: worker_runtime.Transports.ws }, function (t) { - return t.isSupported({}); - })); - }; - Pusher.prototype.channel = function (name) { + channel(name) { return this.channels.find(name); - }; - Pusher.prototype.allChannels = function () { + } + allChannels() { return this.channels.all(); - }; - Pusher.prototype.connect = function () { + } + connect() { this.connection.connect(); if (this.timelineSender) { if (!this.timelineSenderTimer) { var usingTLS = this.connection.isUsingTLS(); var timelineSender = this.timelineSender; - this.timelineSenderTimer = new PeriodicTimer(60000, function () { + this.timelineSenderTimer = new timers_PeriodicTimer(60000, function () { timelineSender.send(usingTLS); }); } } - }; - Pusher.prototype.disconnect = function () { + } + disconnect() { this.connection.disconnect(); if (this.timelineSenderTimer) { this.timelineSenderTimer.ensureAborted(); this.timelineSenderTimer = null; } - }; - Pusher.prototype.bind = function (event_name, callback, context) { + } + bind(event_name, callback, context) { this.global_emitter.bind(event_name, callback, context); return this; - }; - Pusher.prototype.unbind = function (event_name, callback, context) { + } + unbind(event_name, callback, context) { this.global_emitter.unbind(event_name, callback, context); return this; - }; - Pusher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_emitter.bind_global(callback); return this; - }; - Pusher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { this.global_emitter.unbind_global(callback); return this; - }; - Pusher.prototype.unbind_all = function (callback) { + } + unbind_all(callback) { this.global_emitter.unbind_all(); return this; - }; - Pusher.prototype.subscribeAll = function () { + } + subscribeAll() { var channelName; for (channelName in this.channels.channels) { if (this.channels.channels.hasOwnProperty(channelName)) { this.subscribe(channelName); } } - }; - Pusher.prototype.subscribe = function (channel_name) { + } + subscribe(channel_name) { var channel = this.channels.add(channel_name, this); if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); @@ -6956,8 +6554,8 @@ var pusher_Pusher = (function () { channel.subscribe(); } return channel; - }; - Pusher.prototype.unsubscribe = function (channel_name) { + } + unsubscribe(channel_name) { var channel = this.channels.find(channel_name); if (channel && channel.subscriptionPending) { channel.cancelSubscription(); @@ -6968,25 +6566,24 @@ var pusher_Pusher = (function () { channel.unsubscribe(); } } - }; - Pusher.prototype.send_event = function (event_name, data, channel) { + } + send_event(event_name, data, channel) { return this.connection.send_event(event_name, data, channel); - }; - Pusher.prototype.shouldUseTLS = function () { + } + shouldUseTLS() { return this.config.useTLS; - }; - Pusher.prototype.signin = function () { + } + signin() { this.user.signin(); - }; - Pusher.instances = []; - Pusher.isReady = false; - Pusher.logToConsole = false; - Pusher.Runtime = worker_runtime; - Pusher.ScriptReceivers = worker_runtime.ScriptReceivers; - Pusher.DependenciesReceivers = worker_runtime.DependenciesReceivers; - Pusher.auth_callbacks = worker_runtime.auth_callbacks; - return Pusher; -}()); + } +} +pusher_Pusher.instances = []; +pusher_Pusher.isReady = false; +pusher_Pusher.logToConsole = false; +pusher_Pusher.Runtime = worker_runtime; +pusher_Pusher.ScriptReceivers = worker_runtime.ScriptReceivers; +pusher_Pusher.DependenciesReceivers = worker_runtime.DependenciesReceivers; +pusher_Pusher.auth_callbacks = worker_runtime.auth_callbacks; /* harmony default export */ var core_pusher = (pusher_Pusher); function checkAppKey(key) { if (key === null || key === undefined) { @@ -6999,36 +6596,18 @@ worker_runtime.setup(pusher_Pusher); var nacl_fast = __webpack_require__(2); // CONCATENATED MODULE: ./src/core/pusher-with-encryption.ts -var pusher_with_encryption_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var pusher_with_encryption_PusherWithEncryption = (function (_super) { - pusher_with_encryption_extends(PusherWithEncryption, _super); - function PusherWithEncryption(app_key, options) { - var _this = this; - core_pusher.logToConsole = PusherWithEncryption.logToConsole; - core_pusher.log = PusherWithEncryption.log; +class pusher_with_encryption_PusherWithEncryption extends core_pusher { + constructor(app_key, options) { + core_pusher.logToConsole = pusher_with_encryption_PusherWithEncryption.logToConsole; + core_pusher.log = pusher_with_encryption_PusherWithEncryption.log; validateOptions(options); options.nacl = nacl_fast; - _this = _super.call(this, app_key, options) || this; - return _this; + super(app_key, options); } - return PusherWithEncryption; -}(core_pusher)); -/* harmony default export */ var pusher_with_encryption = __webpack_exports__["default"] = (pusher_with_encryption_PusherWithEncryption); +} /***/ }) diff --git a/dist/worker/pusher-with-encryption.worker.js.map b/dist/worker/pusher-with-encryption.worker.js.map index 5c11f13ea..306c139e8 100644 --- a/dist/worker/pusher-with-encryption.worker.js.map +++ b/dist/worker/pusher-with-encryption.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/crypto (ignored)","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;AClFA,sCAAsC;AACtC,6CAA6C;;;;;;;;;;;;;;;AAE7C;;GAEG;AAEH,iDAAiD;AACjD,kDAAkD;AAClD,kCAAkC;AAClC,IAAM,YAAY,GAAG,GAAG,CAAC;AAEzB;;;;GAIG;AACH;IACI,kDAAkD;IAElD,eAAoB,iBAAuB;QAAvB,2DAAuB;QAAvB,sBAAiB,GAAjB,iBAAiB,CAAM;IAAI,CAAC;IAEhD,6BAAa,GAAb,UAAc,MAAc;QACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACnC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,sBAAM,GAAN,UAAO,IAAgB;QACnB,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7D,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAC/C;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;aAC/C;iBAAM;gBACH,GAAG,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;aACvC;YACD,GAAG,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;SACvC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,gCAAgB,GAAhB,UAAiB,MAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACnC;QACD,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,6BAAa,GAAb,UAAc,CAAS;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,sBAAM,GAAN,UAAO,CAAS;QACZ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAChB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAChD,IAAM,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;QACxC,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,OAAO,KAAK,CAAC,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACrE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,oCAAoC;IACpC,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,EAAE;IAEF,2CAA2C;IACjC,2BAAW,GAArB,UAAsB,CAAS;QAC3B,qDAAqD;QACrD,EAAE;QACF,wDAAwD;QACxD,qDAAqD;QACrD,uCAAuC;QACvC,EAAE;QACF,0DAA0D;QAC1D,uCAAuC;QACvC,uCAAuC;QACvC,EAAE;QACF,kEAAkE;QAClE,+DAA+D;QAC/D,EAAE;QACF,gEAAgE;QAChE,gEAAgE;QAChE,8BAA8B;QAC9B,EAAE;QACF,2CAA2C;QAC3C,wCAAwC;QACxC,EAAE;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,SAAS;QACT,MAAM,IAAI,EAAE,CAAC;QACb,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEnD,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,yDAAyD;IAC/C,2BAAW,GAArB,UAAsB,CAAS;QAC3B,gEAAgE;QAChE,qEAAqE;QACrE,4DAA4D;QAC5D,aAAa;QACb,EAAE;QACF,yDAAyD;QACzD,gEAAgE;QAChE,4DAA4D;QAC5D,6BAA6B;QAC7B,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,+BAA+B;QAE1D,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,qBAAqB;QACrB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,iCAAiB,GAAzB,UAA0B,CAAS;QAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,EAAE;oBACjC,MAAM;iBACT;gBACD,aAAa,EAAE,CAAC;aACnB;YACD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;aACrD;SACJ;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAEL,YAAC;AAAD,CAAC;AA3LY,sBAAK;AA6LlB,IAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;AAE7B,SAAgB,MAAM,CAAC,IAAgB;IACnC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM,CAAC,CAAS;IAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAFD,wBAEC;AAED;;;;;GAKG;AACH;IAAkC,gCAAK;IAAvC;;IAwCA,CAAC;IAvCG,+DAA+D;IAC/D,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,EAAE;IAEQ,kCAAW,GAArB,UAAsB,CAAS;QAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,SAAS;QACT,MAAM,IAAI,EAAE,CAAC;QACb,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEnD,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAES,kCAAW,GAArB,UAAsB,CAAS;QAC3B,IAAI,MAAM,GAAG,YAAY,CAAC;QAE1B,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,qBAAqB;QACrB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,mBAAC;AAAD,CAAC,CAxCiC,KAAK,GAwCtC;AAxCY,oCAAY;AA0CzB,IAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAExC,SAAgB,aAAa,CAAC,IAAgB;IAC1C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAFD,sCAEC;AAED,SAAgB,aAAa,CAAC,CAAS;IACnC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAFD,sCAEC;AAGY,qBAAa,GAAG,UAAC,MAAc;IACxC,eAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAA9B,CAA8B,CAAC;AAEtB,wBAAgB,GAAG,UAAC,MAAc;IAC3C,eAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAAjC,CAAiC,CAAC;AAEzB,qBAAa,GAAG,UAAC,CAAS;IACnC,eAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAAzB,CAAyB,CAAC;;;;;;;;;AC1R9B,sCAAsC;AACtC,6CAA6C;;AAE7C;;GAEG;AAEH,IAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,IAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD;;;GAGG;AACH,SAAgB,MAAM,CAAC,CAAS;IAC5B,qDAAqD;IACrD,2DAA2D;IAC3D,2CAA2C;IAC3C,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;SAClB;aAAM,IAAI,CAAC,GAAG,KAAK,EAAE;YAClB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;aAAM,IAAI,CAAC,GAAG,MAAM,EAAE;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;aAAM;YACH,CAAC,EAAE,CAAC,CAAC,yBAAyB;YAC9B,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC7B,CAAC,IAAI,OAAO,CAAC;YAEb,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YACrC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;KACJ;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AA/BD,wBA+BC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,CAAS;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,GAAG,KAAK,EAAE;YAClB,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,GAAG,MAAM,EAAE;YACnB,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;aAClC;YACD,CAAC,EAAE,CAAC,CAAC,uBAAuB;YAC5B,MAAM,IAAI,CAAC,CAAC;SACf;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;SAClC;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AArBD,sCAqBC;AAED;;;GAGG;AACH,SAAgB,MAAM,CAAC,GAAe;IAClC,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,IAAI,GAAG,UAAC;YACR,IAAI,CAAC,GAAG,IAAI,EAAE;gBACV,oBAAoB;gBACpB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBACtB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAClC,GAAG,GAAG,IAAI,CAAC;aACd;iBAAM,IAAI,CAAC,GAAG,IAAI,EAAE;gBACjB,qBAAqB;gBACrB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBAC9C,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBACtD,GAAG,GAAG,KAAK,CAAC;aACf;iBAAM,IAAI,CAAC,GAAG,IAAI,EAAE;gBACjB,qBAAqB;gBACrB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBACtE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC1E,GAAG,GAAG,OAAO,CAAC;aACjB;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,IAAI,OAAO,EAAE;gBACd,kBAAkB;gBAClB,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,IAAI,OAAO,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAjED,wBAiEC;;;;;;;AC/ID;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AA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","file":"pusher-with-encryption.worker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","/* (ignored) */","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/crypto (ignored)","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":[],"mappings":"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AAI,OAAO,EAAE;gBACd,kBAAkB;gBAClB,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,IAAI,OAAO,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAjED,wBAiEC;;;;;;;AC/ID;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA,wCAAwC,4BAA4B;;AAEpE;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;;AAEA,sBAAsB;AACtB,sBAAsB;;AAEtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;;AAEA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,OAAO;AACpB;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,QAAQ;AACrB;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;;AAErB;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;AACA;;AAEA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,UAAU;AACV;;AA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","file":"pusher-with-encryption.worker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","/* (ignored) */","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/worker/pusher-with-encryption.worker.min.js b/dist/worker/pusher-with-encryption.worker.min.js index ef72102ea..0fda3a7c8 100644 --- a/dist/worker/pusher-with-encryption.worker.min.js +++ b/dist/worker/pusher-with-encryption.worker.min.js @@ -1,9 +1,9 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. */ -!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Pusher=n():t.Pusher=n()}(this,(function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=3)}([function(t,n,e){"use strict";var r,o=this&&this.__extends||(r=function(t,n){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(t,n)},function(t,n){function e(){this.constructor=t}r(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)});Object.defineProperty(n,"__esModule",{value:!0});var i=function(){function t(t){void 0===t&&(t="="),this._paddingCharacter=t}return t.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(8*t+5)/6|0},t.prototype.encode=function(t){for(var n="",e=0;e>>18&63),n+=this._encodeByte(r>>>12&63),n+=this._encodeByte(r>>>6&63),n+=this._encodeByte(r>>>0&63)}var o=t.length-e;if(o>0){r=t[e]<<16|(2===o?t[e+1]<<8:0);n+=this._encodeByte(r>>>18&63),n+=this._encodeByte(r>>>12&63),n+=2===o?this._encodeByte(r>>>6&63):this._paddingCharacter||"",n+=this._paddingCharacter||""}return n},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var n=this._getPaddingLength(t),e=t.length-n,r=new Uint8Array(this.maxDecodedLength(e)),o=0,i=0,s=0,a=0,c=0,u=0,h=0;i>>4,r[o++]=c<<4|u>>>2,r[o++]=u<<6|h,s|=256&a,s|=256&c,s|=256&u,s|=256&h;if(i>>4,s|=256&a,s|=256&c),i>>2,s|=256&u),i>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-15,n+=62-t>>>8&3,String.fromCharCode(n)},t.prototype._decodeChar=function(t){var n=256;return n+=(42-t&t-44)>>>8&-256+t-43+62,n+=(46-t&t-48)>>>8&-256+t-47+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var n=0;if(this._paddingCharacter){for(var e=t.length-1;e>=0&&t[e]===this._paddingCharacter;e--)n++;if(t.length<4||n>2)throw new Error("Base64Coder: incorrect padding")}return n},t}();n.Coder=i;var s=new i;n.encode=function(t){return s.encode(t)},n.decode=function(t){return s.decode(t)};var a=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return o(n,t),n.prototype._encodeByte=function(t){var n=t;return n+=65,n+=25-t>>>8&6,n+=51-t>>>8&-75,n+=61-t>>>8&-13,n+=62-t>>>8&49,String.fromCharCode(n)},n.prototype._decodeChar=function(t){var n=256;return n+=(44-t&t-46)>>>8&-256+t-45+62,n+=(94-t&t-96)>>>8&-256+t-95+63,n+=(47-t&t-58)>>>8&-256+t-48+52,n+=(64-t&t-91)>>>8&-256+t-65+0,n+=(96-t&t-123)>>>8&-256+t-97+26},n}(i);n.URLSafeCoder=a;var c=new a;n.encodeURLSafe=function(t){return c.encode(t)},n.decodeURLSafe=function(t){return c.decode(t)},n.encodedLength=function(t){return s.encodedLength(t)},n.maxDecodedLength=function(t){return s.maxDecodedLength(t)},n.decodedLength=function(t){return s.decodedLength(t)}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r="utf8: invalid source encoding";function o(t){for(var n=0,e=0;e=t.length-1)throw new Error("utf8: invalid string");e++,n+=4}}return n}n.encode=function(t){for(var n=new Uint8Array(o(t)),e=0,r=0;r>6,n[e++]=128|63&i):i<55296?(n[e++]=224|i>>12,n[e++]=128|i>>6&63,n[e++]=128|63&i):(r++,i=(1023&i)<<10,i|=1023&t.charCodeAt(r),i+=65536,n[e++]=240|i>>18,n[e++]=128|i>>12&63,n[e++]=128|i>>6&63,n[e++]=128|63&i)}return n},n.encodedLength=o,n.decode=function(t){for(var n=[],e=0;e=t.length)throw new Error(r);if(128!=(192&(s=t[++e])))throw new Error(r);o=(31&o)<<6|63&s,i=128}else if(o<240){if(e>=t.length-1)throw new Error(r);var s=t[++e],a=t[++e];if(128!=(192&s)||128!=(192&a))throw new Error(r);o=(15&o)<<12|(63&s)<<6|63&a,i=2048}else{if(!(o<248))throw new Error(r);if(e>=t.length-2)throw new Error(r);s=t[++e],a=t[++e];var c=t[++e];if(128!=(192&s)||128!=(192&a)||128!=(192&c))throw new Error(r);o=(15&o)<<18|(63&s)<<12|(63&a)<<6|63&c,i=65536}if(o=55296&&o<=57343)throw new Error(r);if(o>=65536){if(o>1114111)throw new Error(r);o-=65536,n.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}n.push(String.fromCharCode(o))}return n.join("")}},function(t,n,e){!function(t){"use strict";var n=function(t){var n,e=new Float64Array(16);if(t)for(n=0;n>24&255,t[n+1]=e>>16&255,t[n+2]=e>>8&255,t[n+3]=255&e,t[n+4]=r>>24&255,t[n+5]=r>>16&255,t[n+6]=r>>8&255,t[n+7]=255&r}function y(t,n,e,r,o){var i,s=0;for(i=0;i>>8)-1}function v(t,n,e,r){return y(t,n,e,r,16)}function g(t,n,e,r){return y(t,n,e,r,32)}function b(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,p=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,_=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,w=i,S=s,k=a,C=c,T=u,P=h,O=f,A=l,E=p,x=d,L=y,U=v,R=g,j=b,M=m,I=_,N=0;N<20;N+=2)w^=(o=(R^=(o=(E^=(o=(T^=(o=w+R|0)<<7|o>>>25)+w|0)<<9|o>>>23)+T|0)<<13|o>>>19)+E|0)<<18|o>>>14,P^=(o=(S^=(o=(j^=(o=(x^=(o=P+S|0)<<7|o>>>25)+P|0)<<9|o>>>23)+x|0)<<13|o>>>19)+j|0)<<18|o>>>14,L^=(o=(O^=(o=(k^=(o=(M^=(o=L+O|0)<<7|o>>>25)+L|0)<<9|o>>>23)+M|0)<<13|o>>>19)+k|0)<<18|o>>>14,I^=(o=(U^=(o=(A^=(o=(C^=(o=I+U|0)<<7|o>>>25)+I|0)<<9|o>>>23)+C|0)<<13|o>>>19)+A|0)<<18|o>>>14,w^=(o=(C^=(o=(k^=(o=(S^=(o=w+C|0)<<7|o>>>25)+w|0)<<9|o>>>23)+S|0)<<13|o>>>19)+k|0)<<18|o>>>14,P^=(o=(T^=(o=(A^=(o=(O^=(o=P+T|0)<<7|o>>>25)+P|0)<<9|o>>>23)+O|0)<<13|o>>>19)+A|0)<<18|o>>>14,L^=(o=(x^=(o=(E^=(o=(U^=(o=L+x|0)<<7|o>>>25)+L|0)<<9|o>>>23)+U|0)<<13|o>>>19)+E|0)<<18|o>>>14,I^=(o=(M^=(o=(j^=(o=(R^=(o=I+M|0)<<7|o>>>25)+I|0)<<9|o>>>23)+R|0)<<13|o>>>19)+j|0)<<18|o>>>14;w=w+i|0,S=S+s|0,k=k+a|0,C=C+c|0,T=T+u|0,P=P+h|0,O=O+f|0,A=A+l|0,E=E+p|0,x=x+d|0,L=L+y|0,U=U+v|0,R=R+g|0,j=j+b|0,M=M+m|0,I=I+_|0,t[0]=w>>>0&255,t[1]=w>>>8&255,t[2]=w>>>16&255,t[3]=w>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=P>>>0&255,t[21]=P>>>8&255,t[22]=P>>>16&255,t[23]=P>>>24&255,t[24]=O>>>0&255,t[25]=O>>>8&255,t[26]=O>>>16&255,t[27]=O>>>24&255,t[28]=A>>>0&255,t[29]=A>>>8&255,t[30]=A>>>16&255,t[31]=A>>>24&255,t[32]=E>>>0&255,t[33]=E>>>8&255,t[34]=E>>>16&255,t[35]=E>>>24&255,t[36]=x>>>0&255,t[37]=x>>>8&255,t[38]=x>>>16&255,t[39]=x>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=U>>>0&255,t[45]=U>>>8&255,t[46]=U>>>16&255,t[47]=U>>>24&255,t[48]=R>>>0&255,t[49]=R>>>8&255,t[50]=R>>>16&255,t[51]=R>>>24&255,t[52]=j>>>0&255,t[53]=j>>>8&255,t[54]=j>>>16&255,t[55]=j>>>24&255,t[56]=M>>>0&255,t[57]=M>>>8&255,t[58]=M>>>16&255,t[59]=M>>>24&255,t[60]=I>>>0&255,t[61]=I>>>8&255,t[62]=I>>>16&255,t[63]=I>>>24&255}(t,n,e,r)}function m(t,n,e,r){!function(t,n,e,r){for(var o,i=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,h=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,l=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,p=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,d=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,y=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,v=255&e[16]|(255&e[17])<<8|(255&e[18])<<16|(255&e[19])<<24,g=255&e[20]|(255&e[21])<<8|(255&e[22])<<16|(255&e[23])<<24,b=255&e[24]|(255&e[25])<<8|(255&e[26])<<16|(255&e[27])<<24,m=255&e[28]|(255&e[29])<<8|(255&e[30])<<16|(255&e[31])<<24,_=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,w=0;w<20;w+=2)i^=(o=(g^=(o=(p^=(o=(u^=(o=i+g|0)<<7|o>>>25)+i|0)<<9|o>>>23)+u|0)<<13|o>>>19)+p|0)<<18|o>>>14,h^=(o=(s^=(o=(b^=(o=(d^=(o=h+s|0)<<7|o>>>25)+h|0)<<9|o>>>23)+d|0)<<13|o>>>19)+b|0)<<18|o>>>14,y^=(o=(f^=(o=(a^=(o=(m^=(o=y+f|0)<<7|o>>>25)+y|0)<<9|o>>>23)+m|0)<<13|o>>>19)+a|0)<<18|o>>>14,_^=(o=(v^=(o=(l^=(o=(c^=(o=_+v|0)<<7|o>>>25)+_|0)<<9|o>>>23)+c|0)<<13|o>>>19)+l|0)<<18|o>>>14,i^=(o=(c^=(o=(a^=(o=(s^=(o=i+c|0)<<7|o>>>25)+i|0)<<9|o>>>23)+s|0)<<13|o>>>19)+a|0)<<18|o>>>14,h^=(o=(u^=(o=(l^=(o=(f^=(o=h+u|0)<<7|o>>>25)+h|0)<<9|o>>>23)+f|0)<<13|o>>>19)+l|0)<<18|o>>>14,y^=(o=(d^=(o=(p^=(o=(v^=(o=y+d|0)<<7|o>>>25)+y|0)<<9|o>>>23)+v|0)<<13|o>>>19)+p|0)<<18|o>>>14,_^=(o=(m^=(o=(b^=(o=(g^=(o=_+m|0)<<7|o>>>25)+_|0)<<9|o>>>23)+g|0)<<13|o>>>19)+b|0)<<18|o>>>14;t[0]=i>>>0&255,t[1]=i>>>8&255,t[2]=i>>>16&255,t[3]=i>>>24&255,t[4]=h>>>0&255,t[5]=h>>>8&255,t[6]=h>>>16&255,t[7]=h>>>24&255,t[8]=y>>>0&255,t[9]=y>>>8&255,t[10]=y>>>16&255,t[11]=y>>>24&255,t[12]=_>>>0&255,t[13]=_>>>8&255,t[14]=_>>>16&255,t[15]=_>>>24&255,t[16]=f>>>0&255,t[17]=f>>>8&255,t[18]=f>>>16&255,t[19]=f>>>24&255,t[20]=l>>>0&255,t[21]=l>>>8&255,t[22]=l>>>16&255,t[23]=l>>>24&255,t[24]=p>>>0&255,t[25]=p>>>8&255,t[26]=p>>>16&255,t[27]=p>>>24&255,t[28]=d>>>0&255,t[29]=d>>>8&255,t[30]=d>>>16&255,t[31]=d>>>24&255}(t,n,e,r)}var _=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function w(t,n,e,r,o,i,s){var a,c,u=new Uint8Array(16),h=new Uint8Array(64);for(c=0;c<16;c++)u[c]=0;for(c=0;c<8;c++)u[c]=i[c];for(;o>=64;){for(b(h,u,s,_),c=0;c<64;c++)t[n+c]=e[r+c]^h[c];for(a=1,c=8;c<16;c++)a=a+(255&u[c])|0,u[c]=255&a,a>>>=8;o-=64,n+=64,r+=64}if(o>0)for(b(h,u,s,_),c=0;c=64;){for(b(c,a,o,_),s=0;s<64;s++)t[n+s]=c[s];for(i=1,s=8;s<16;s++)i=i+(255&a[s])|0,a[s]=255&i,i>>>=8;e-=64,n+=64}if(e>0)for(b(c,a,o,_),s=0;s>>13|e<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(e>>>10|r<<6),o=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|o<<9),i=255&t[8]|(255&t[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,s=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(i>>>14|s<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(s>>>11|a<<5),c=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function P(t,n,e,r,o,i){var s=new T(i);return s.update(e,r,o),s.finish(t,n),0}function O(t,n,e,r,o,i){var s=new Uint8Array(16);return P(s,0,e,r,o,i),v(t,n,s,0)}function A(t,n,e,r,o){var i;if(e<32)return-1;for(C(t,0,n,0,e,r,o),P(t,16,t,32,e-32,t),i=0;i<16;i++)t[i]=0;return 0}function E(t,n,e,r,o){var i,s=new Uint8Array(32);if(e<32)return-1;if(k(s,0,32,r,o),0!==O(n,16,n,32,e-32,s))return-1;for(C(t,0,n,0,e,r,o),i=0;i<32;i++)t[i]=0;return 0}function x(t,n){var e;for(e=0;e<16;e++)t[e]=0|n[e]}function L(t){var n,e,r=1;for(n=0;n<16;n++)e=t[n]+r+65535,r=Math.floor(e/65536),t[n]=e-65536*r;t[0]+=r-1+37*(r-1)}function U(t,n,e){for(var r,o=~(e-1),i=0;i<16;i++)r=o&(t[i]^n[i]),t[i]^=r,n[i]^=r}function R(t,e){var r,o,i,s=n(),a=n();for(r=0;r<16;r++)a[r]=e[r];for(L(a),L(a),L(a),o=0;o<2;o++){for(s[0]=a[0]-65517,r=1;r<15;r++)s[r]=a[r]-65535-(s[r-1]>>16&1),s[r-1]&=65535;s[15]=a[15]-32767-(s[14]>>16&1),i=s[15]>>16&1,s[14]&=65535,U(a,s,1-i)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function j(t,n){var e=new Uint8Array(32),r=new Uint8Array(32);return R(e,t),R(r,n),g(e,0,r,0)}function M(t){var n=new Uint8Array(32);return R(n,t),1&n[0]}function I(t,n){var e;for(e=0;e<16;e++)t[e]=n[2*e]+(n[2*e+1]<<8);t[15]&=32767}function N(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]+e[r]}function D(t,n,e){for(var r=0;r<16;r++)t[r]=n[r]-e[r]}function z(t,n,e){var r,o,i=0,s=0,a=0,c=0,u=0,h=0,f=0,l=0,p=0,d=0,y=0,v=0,g=0,b=0,m=0,_=0,w=0,S=0,k=0,C=0,T=0,P=0,O=0,A=0,E=0,x=0,L=0,U=0,R=0,j=0,M=0,I=e[0],N=e[1],D=e[2],z=e[3],H=e[4],B=e[5],F=e[6],q=e[7],Y=e[8],K=e[9],J=e[10],W=e[11],X=e[12],G=e[13],V=e[14],Z=e[15];i+=(r=n[0])*I,s+=r*N,a+=r*D,c+=r*z,u+=r*H,h+=r*B,f+=r*F,l+=r*q,p+=r*Y,d+=r*K,y+=r*J,v+=r*W,g+=r*X,b+=r*G,m+=r*V,_+=r*Z,s+=(r=n[1])*I,a+=r*N,c+=r*D,u+=r*z,h+=r*H,f+=r*B,l+=r*F,p+=r*q,d+=r*Y,y+=r*K,v+=r*J,g+=r*W,b+=r*X,m+=r*G,_+=r*V,w+=r*Z,a+=(r=n[2])*I,c+=r*N,u+=r*D,h+=r*z,f+=r*H,l+=r*B,p+=r*F,d+=r*q,y+=r*Y,v+=r*K,g+=r*J,b+=r*W,m+=r*X,_+=r*G,w+=r*V,S+=r*Z,c+=(r=n[3])*I,u+=r*N,h+=r*D,f+=r*z,l+=r*H,p+=r*B,d+=r*F,y+=r*q,v+=r*Y,g+=r*K,b+=r*J,m+=r*W,_+=r*X,w+=r*G,S+=r*V,k+=r*Z,u+=(r=n[4])*I,h+=r*N,f+=r*D,l+=r*z,p+=r*H,d+=r*B,y+=r*F,v+=r*q,g+=r*Y,b+=r*K,m+=r*J,_+=r*W,w+=r*X,S+=r*G,k+=r*V,C+=r*Z,h+=(r=n[5])*I,f+=r*N,l+=r*D,p+=r*z,d+=r*H,y+=r*B,v+=r*F,g+=r*q,b+=r*Y,m+=r*K,_+=r*J,w+=r*W,S+=r*X,k+=r*G,C+=r*V,T+=r*Z,f+=(r=n[6])*I,l+=r*N,p+=r*D,d+=r*z,y+=r*H,v+=r*B,g+=r*F,b+=r*q,m+=r*Y,_+=r*K,w+=r*J,S+=r*W,k+=r*X,C+=r*G,T+=r*V,P+=r*Z,l+=(r=n[7])*I,p+=r*N,d+=r*D,y+=r*z,v+=r*H,g+=r*B,b+=r*F,m+=r*q,_+=r*Y,w+=r*K,S+=r*J,k+=r*W,C+=r*X,T+=r*G,P+=r*V,O+=r*Z,p+=(r=n[8])*I,d+=r*N,y+=r*D,v+=r*z,g+=r*H,b+=r*B,m+=r*F,_+=r*q,w+=r*Y,S+=r*K,k+=r*J,C+=r*W,T+=r*X,P+=r*G,O+=r*V,A+=r*Z,d+=(r=n[9])*I,y+=r*N,v+=r*D,g+=r*z,b+=r*H,m+=r*B,_+=r*F,w+=r*q,S+=r*Y,k+=r*K,C+=r*J,T+=r*W,P+=r*X,O+=r*G,A+=r*V,E+=r*Z,y+=(r=n[10])*I,v+=r*N,g+=r*D,b+=r*z,m+=r*H,_+=r*B,w+=r*F,S+=r*q,k+=r*Y,C+=r*K,T+=r*J,P+=r*W,O+=r*X,A+=r*G,E+=r*V,x+=r*Z,v+=(r=n[11])*I,g+=r*N,b+=r*D,m+=r*z,_+=r*H,w+=r*B,S+=r*F,k+=r*q,C+=r*Y,T+=r*K,P+=r*J,O+=r*W,A+=r*X,E+=r*G,x+=r*V,L+=r*Z,g+=(r=n[12])*I,b+=r*N,m+=r*D,_+=r*z,w+=r*H,S+=r*B,k+=r*F,C+=r*q,T+=r*Y,P+=r*K,O+=r*J,A+=r*W,E+=r*X,x+=r*G,L+=r*V,U+=r*Z,b+=(r=n[13])*I,m+=r*N,_+=r*D,w+=r*z,S+=r*H,k+=r*B,C+=r*F,T+=r*q,P+=r*Y,O+=r*K,A+=r*J,E+=r*W,x+=r*X,L+=r*G,U+=r*V,R+=r*Z,m+=(r=n[14])*I,_+=r*N,w+=r*D,S+=r*z,k+=r*H,C+=r*B,T+=r*F,P+=r*q,O+=r*Y,A+=r*K,E+=r*J,x+=r*W,L+=r*X,U+=r*G,R+=r*V,j+=r*Z,_+=(r=n[15])*I,s+=38*(S+=r*D),a+=38*(k+=r*z),c+=38*(C+=r*H),u+=38*(T+=r*B),h+=38*(P+=r*F),f+=38*(O+=r*q),l+=38*(A+=r*Y),p+=38*(E+=r*K),d+=38*(x+=r*J),y+=38*(L+=r*W),v+=38*(U+=r*X),g+=38*(R+=r*G),b+=38*(j+=r*V),m+=38*(M+=r*Z),i=(r=(i+=38*(w+=r*N))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),_=(r=_+o+65535)-65536*(o=Math.floor(r/65536)),i=(r=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(r/65536)),s=(r=s+o+65535)-65536*(o=Math.floor(r/65536)),a=(r=a+o+65535)-65536*(o=Math.floor(r/65536)),c=(r=c+o+65535)-65536*(o=Math.floor(r/65536)),u=(r=u+o+65535)-65536*(o=Math.floor(r/65536)),h=(r=h+o+65535)-65536*(o=Math.floor(r/65536)),f=(r=f+o+65535)-65536*(o=Math.floor(r/65536)),l=(r=l+o+65535)-65536*(o=Math.floor(r/65536)),p=(r=p+o+65535)-65536*(o=Math.floor(r/65536)),d=(r=d+o+65535)-65536*(o=Math.floor(r/65536)),y=(r=y+o+65535)-65536*(o=Math.floor(r/65536)),v=(r=v+o+65535)-65536*(o=Math.floor(r/65536)),g=(r=g+o+65535)-65536*(o=Math.floor(r/65536)),b=(r=b+o+65535)-65536*(o=Math.floor(r/65536)),m=(r=m+o+65535)-65536*(o=Math.floor(r/65536)),_=(r=_+o+65535)-65536*(o=Math.floor(r/65536)),i+=o-1+37*(o-1),t[0]=i,t[1]=s,t[2]=a,t[3]=c,t[4]=u,t[5]=h,t[6]=f,t[7]=l,t[8]=p,t[9]=d,t[10]=y,t[11]=v,t[12]=g,t[13]=b,t[14]=m,t[15]=_}function H(t,n){z(t,n,n)}function B(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=253;r>=0;r--)H(o,o),2!==r&&4!==r&&z(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function F(t,e){var r,o=n();for(r=0;r<16;r++)o[r]=e[r];for(r=250;r>=0;r--)H(o,o),1!==r&&z(o,o,e);for(r=0;r<16;r++)t[r]=o[r]}function q(t,e,r){var o,i,s=new Uint8Array(32),a=new Float64Array(80),u=n(),h=n(),f=n(),l=n(),p=n(),d=n();for(i=0;i<31;i++)s[i]=e[i];for(s[31]=127&e[31]|64,s[0]&=248,I(a,r),i=0;i<16;i++)h[i]=a[i],l[i]=u[i]=f[i]=0;for(u[0]=l[0]=1,i=254;i>=0;--i)U(u,h,o=s[i>>>3]>>>(7&i)&1),U(f,l,o),N(p,u,f),D(u,u,f),N(f,h,l),D(h,h,l),H(l,p),H(d,u),z(u,f,u),z(f,h,p),N(p,u,f),D(u,u,f),H(h,u),D(f,l,d),z(u,f,c),N(u,u,l),z(f,f,u),z(u,l,d),z(l,h,a),H(h,p),U(u,h,o),U(f,l,o);for(i=0;i<16;i++)a[i+16]=u[i],a[i+32]=f[i],a[i+48]=h[i],a[i+64]=l[i];var y=a.subarray(32),v=a.subarray(16);return B(y,y),z(v,v,y),R(t,v),0}function Y(t,n){return q(t,n,i)}function K(t,n){return r(n,32),Y(t,n)}function J(t,n,e){var r=new Uint8Array(32);return q(r,e,n),m(t,o,r,_)}T.prototype.blocks=function(t,n,e){for(var r,o,i,s,a,c,u,h,f,l,p,d,y,v,g,b,m,_,w,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],P=this.h[3],O=this.h[4],A=this.h[5],E=this.h[6],x=this.h[7],L=this.h[8],U=this.h[9],R=this.r[0],j=this.r[1],M=this.r[2],I=this.r[3],N=this.r[4],D=this.r[5],z=this.r[6],H=this.r[7],B=this.r[8],F=this.r[9];e>=16;)l=f=0,l+=(k+=8191&(r=255&t[n+0]|(255&t[n+1])<<8))*R,l+=(C+=8191&(r>>>13|(o=255&t[n+2]|(255&t[n+3])<<8)<<3))*(5*F),l+=(T+=8191&(o>>>10|(i=255&t[n+4]|(255&t[n+5])<<8)<<6))*(5*B),l+=(P+=8191&(i>>>7|(s=255&t[n+6]|(255&t[n+7])<<8)<<9))*(5*H),f=(l+=(O+=8191&(s>>>4|(a=255&t[n+8]|(255&t[n+9])<<8)<<12))*(5*z))>>>13,l&=8191,l+=(A+=a>>>1&8191)*(5*D),l+=(E+=8191&(a>>>14|(c=255&t[n+10]|(255&t[n+11])<<8)<<2))*(5*N),l+=(x+=8191&(c>>>11|(u=255&t[n+12]|(255&t[n+13])<<8)<<5))*(5*I),l+=(L+=8191&(u>>>8|(h=255&t[n+14]|(255&t[n+15])<<8)<<8))*(5*M),p=f+=(l+=(U+=h>>>5|S)*(5*j))>>>13,p+=k*j,p+=C*R,p+=T*(5*F),p+=P*(5*B),f=(p+=O*(5*H))>>>13,p&=8191,p+=A*(5*z),p+=E*(5*D),p+=x*(5*N),p+=L*(5*I),f+=(p+=U*(5*M))>>>13,p&=8191,d=f,d+=k*M,d+=C*j,d+=T*R,d+=P*(5*F),f=(d+=O*(5*B))>>>13,d&=8191,d+=A*(5*H),d+=E*(5*z),d+=x*(5*D),d+=L*(5*N),y=f+=(d+=U*(5*I))>>>13,y+=k*I,y+=C*M,y+=T*j,y+=P*R,f=(y+=O*(5*F))>>>13,y&=8191,y+=A*(5*B),y+=E*(5*H),y+=x*(5*z),y+=L*(5*D),v=f+=(y+=U*(5*N))>>>13,v+=k*N,v+=C*I,v+=T*M,v+=P*j,f=(v+=O*R)>>>13,v&=8191,v+=A*(5*F),v+=E*(5*B),v+=x*(5*H),v+=L*(5*z),g=f+=(v+=U*(5*D))>>>13,g+=k*D,g+=C*N,g+=T*I,g+=P*M,f=(g+=O*j)>>>13,g&=8191,g+=A*R,g+=E*(5*F),g+=x*(5*B),g+=L*(5*H),b=f+=(g+=U*(5*z))>>>13,b+=k*z,b+=C*D,b+=T*N,b+=P*I,f=(b+=O*M)>>>13,b&=8191,b+=A*j,b+=E*R,b+=x*(5*F),b+=L*(5*B),m=f+=(b+=U*(5*H))>>>13,m+=k*H,m+=C*z,m+=T*D,m+=P*N,f=(m+=O*I)>>>13,m&=8191,m+=A*M,m+=E*j,m+=x*R,m+=L*(5*F),_=f+=(m+=U*(5*B))>>>13,_+=k*B,_+=C*H,_+=T*z,_+=P*D,f=(_+=O*N)>>>13,_&=8191,_+=A*I,_+=E*M,_+=x*j,_+=L*R,w=f+=(_+=U*(5*F))>>>13,w+=k*F,w+=C*B,w+=T*H,w+=P*z,f=(w+=O*D)>>>13,w&=8191,w+=A*N,w+=E*I,w+=x*M,w+=L*j,k=l=8191&(f=(f=((f+=(w+=U*R)>>>13)<<2)+f|0)+(l&=8191)|0),C=p+=f>>>=13,T=d&=8191,P=y&=8191,O=v&=8191,A=g&=8191,E=b&=8191,x=m&=8191,L=_&=8191,U=w&=8191,n+=16,e-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=P,this.h[4]=O,this.h[5]=A,this.h[6]=E,this.h[7]=x,this.h[8]=L,this.h[9]=U},T.prototype.finish=function(t,n){var e,r,o,i,s=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(e=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=e,e=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*e,e=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=e,e=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=e,s[0]=this.h[0]+5,e=s[0]>>>13,s[0]&=8191,i=1;i<10;i++)s[i]=this.h[i]+e,e=s[i]>>>13,s[i]&=8191;for(s[9]-=8192,r=(1^e)-1,i=0;i<10;i++)s[i]&=r;for(r=~r,i=0;i<10;i++)this.h[i]=this.h[i]&r|s[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;t[n+0]=this.h[0]>>>0&255,t[n+1]=this.h[0]>>>8&255,t[n+2]=this.h[1]>>>0&255,t[n+3]=this.h[1]>>>8&255,t[n+4]=this.h[2]>>>0&255,t[n+5]=this.h[2]>>>8&255,t[n+6]=this.h[3]>>>0&255,t[n+7]=this.h[3]>>>8&255,t[n+8]=this.h[4]>>>0&255,t[n+9]=this.h[4]>>>8&255,t[n+10]=this.h[5]>>>0&255,t[n+11]=this.h[5]>>>8&255,t[n+12]=this.h[6]>>>0&255,t[n+13]=this.h[6]>>>8&255,t[n+14]=this.h[7]>>>0&255,t[n+15]=this.h[7]>>>8&255},T.prototype.update=function(t,n,e){var r,o;if(this.leftover){for((o=16-this.leftover)>e&&(o=e),r=0;r=16&&(o=e-e%16,this.blocks(t,n,o),n+=o,e-=o),e){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+X,x[S]=e[k+0]<<24|e[k+1]<<16|e[k+2]<<8|e[k+3],L[S]=e[k+4]<<24|e[k+5]<<16|e[k+6]<<8|e[k+7];for(S=0;S<80;S++)if(o=U,i=R,s=j,a=M,c=I,u=N,h=D,z,l=H,p=B,d=F,y=q,v=Y,g=K,b=J,W,P=65535&(T=W),O=T>>>16,A=65535&(C=z),E=C>>>16,P+=65535&(T=(Y>>>14|I<<18)^(Y>>>18|I<<14)^(I>>>9|Y<<23)),O+=T>>>16,A+=65535&(C=(I>>>14|Y<<18)^(I>>>18|Y<<14)^(Y>>>9|I<<23)),E+=C>>>16,P+=65535&(T=Y&K^~Y&J),O+=T>>>16,A+=65535&(C=I&N^~I&D),E+=C>>>16,P+=65535&(T=G[2*S+1]),O+=T>>>16,A+=65535&(C=G[2*S]),E+=C>>>16,C=x[S%16],O+=(T=L[S%16])>>>16,A+=65535&C,E+=C>>>16,A+=(O+=(P+=65535&T)>>>16)>>>16,P=65535&(T=w=65535&P|O<<16),O=T>>>16,A=65535&(C=_=65535&A|(E+=A>>>16)<<16),E=C>>>16,P+=65535&(T=(H>>>28|U<<4)^(U>>>2|H<<30)^(U>>>7|H<<25)),O+=T>>>16,A+=65535&(C=(U>>>28|H<<4)^(H>>>2|U<<30)^(H>>>7|U<<25)),E+=C>>>16,O+=(T=H&B^H&F^B&F)>>>16,A+=65535&(C=U&R^U&j^R&j),E+=C>>>16,f=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,m=65535&P|O<<16,P=65535&(T=y),O=T>>>16,A=65535&(C=a),E=C>>>16,O+=(T=w)>>>16,A+=65535&(C=_),E+=C>>>16,R=o,j=i,M=s,I=a=65535&(A+=(O+=(P+=65535&T)>>>16)>>>16)|(E+=A>>>16)<<16,N=c,D=u,z=h,U=f,B=l,F=p,q=d,Y=y=65535&P|O<<16,K=v,J=g,W=b,H=m,S%16==15)for(k=0;k<16;k++)C=x[k],P=65535&(T=L[k]),O=T>>>16,A=65535&C,E=C>>>16,C=x[(k+9)%16],P+=65535&(T=L[(k+9)%16]),O+=T>>>16,A+=65535&C,E+=C>>>16,_=x[(k+1)%16],P+=65535&(T=((w=L[(k+1)%16])>>>1|_<<31)^(w>>>8|_<<24)^(w>>>7|_<<25)),O+=T>>>16,A+=65535&(C=(_>>>1|w<<31)^(_>>>8|w<<24)^_>>>7),E+=C>>>16,_=x[(k+14)%16],O+=(T=((w=L[(k+14)%16])>>>19|_<<13)^(_>>>29|w<<3)^(w>>>6|_<<26))>>>16,A+=65535&(C=(_>>>19|w<<13)^(w>>>29|_<<3)^_>>>6),E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,x[k]=65535&A|E<<16,L[k]=65535&P|O<<16;P=65535&(T=H),O=T>>>16,A=65535&(C=U),E=C>>>16,C=t[0],O+=(T=n[0])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[0]=U=65535&A|E<<16,n[0]=H=65535&P|O<<16,P=65535&(T=B),O=T>>>16,A=65535&(C=R),E=C>>>16,C=t[1],O+=(T=n[1])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[1]=R=65535&A|E<<16,n[1]=B=65535&P|O<<16,P=65535&(T=F),O=T>>>16,A=65535&(C=j),E=C>>>16,C=t[2],O+=(T=n[2])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[2]=j=65535&A|E<<16,n[2]=F=65535&P|O<<16,P=65535&(T=q),O=T>>>16,A=65535&(C=M),E=C>>>16,C=t[3],O+=(T=n[3])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[3]=M=65535&A|E<<16,n[3]=q=65535&P|O<<16,P=65535&(T=Y),O=T>>>16,A=65535&(C=I),E=C>>>16,C=t[4],O+=(T=n[4])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[4]=I=65535&A|E<<16,n[4]=Y=65535&P|O<<16,P=65535&(T=K),O=T>>>16,A=65535&(C=N),E=C>>>16,C=t[5],O+=(T=n[5])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[5]=N=65535&A|E<<16,n[5]=K=65535&P|O<<16,P=65535&(T=J),O=T>>>16,A=65535&(C=D),E=C>>>16,C=t[6],O+=(T=n[6])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[6]=D=65535&A|E<<16,n[6]=J=65535&P|O<<16,P=65535&(T=W),O=T>>>16,A=65535&(C=z),E=C>>>16,C=t[7],O+=(T=n[7])>>>16,A+=65535&C,E+=C>>>16,E+=(A+=(O+=(P+=65535&T)>>>16)>>>16)>>>16,t[7]=z=65535&A|E<<16,n[7]=W=65535&P|O<<16,X+=128,r-=128}return r}function Z(t,n,e){var r,o=new Int32Array(8),i=new Int32Array(8),s=new Uint8Array(256),a=e;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,V(o,i,n,e),e%=128,r=0;r=0;--o)$(t,n,r=e[o/8|0]>>(7&o)&1),Q(n,t),Q(t,t),$(t,n,r)}function et(t,e){var r=[n(),n(),n(),n()];x(r[0],f),x(r[1],l),x(r[2],a),z(r[3],f,l),nt(t,r,e)}function rt(t,e,o){var i,s=new Uint8Array(64),a=[n(),n(),n(),n()];for(o||r(e,32),Z(s,e,32),s[0]&=248,s[31]&=127,s[31]|=64,et(a,s),tt(t,a),i=0;i<32;i++)e[i+32]=t[i];return 0}var ot=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function it(t,n){var e,r,o,i;for(r=63;r>=32;--r){for(e=0,o=r-32,i=r-12;o>4)*ot[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*ot[o];for(r=0;r<32;r++)n[r+1]+=n[r]>>8,t[r]=255&n[r]}function st(t){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=t[n];for(n=0;n<64;n++)t[n]=0;it(t,e)}function at(t,e,r,o){var i,s,a=new Uint8Array(64),c=new Uint8Array(64),u=new Uint8Array(64),h=new Float64Array(64),f=[n(),n(),n(),n()];Z(a,o,32),a[0]&=248,a[31]&=127,a[31]|=64;var l=r+64;for(i=0;i>7&&D(t[0],s,t[0]),z(t[3],t[0],t[1]),0)}(l,o))return-1;for(i=0;i=0},t.sign.keyPair=function(){var t=new Uint8Array(32),n=new Uint8Array(64);return rt(t,n),{publicKey:t,secretKey:n}},t.sign.keyPair.fromSecretKey=function(t){if(ht(t),64!==t.length)throw new Error("bad secret key size");for(var n=new Uint8Array(32),e=0;e>>6)+r(128|63&n):r(224|n>>>12&15)+r(128|n>>>6&63)+r(128|63&n)},h=function(t){return t.replace(/[^\x00-\x7F]/g,u)},f=function(t){var n=[0,2,1][t.length%3],e=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[o.charAt(e>>>18),o.charAt(e>>>12&63),n>=2?"=":o.charAt(e>>>6&63),n>=1?"=":o.charAt(63&e)].join("")},l=self.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,f)},p=function(){function t(t,n,e,r){var o=this;this.clear=n,this.timer=t((function(){o.timer&&(o.timer=r(o.timer))}),e)}return t.prototype.isRunning=function(){return null!==this.timer},t.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},t}(),d=(c=function(t,n){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(t,n)},function(t,n){function e(){this.constructor=t}c(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)});function y(t){self.clearTimeout(t)}function v(t){self.clearInterval(t)}var g=function(t){function n(n,e){return t.call(this,setTimeout,y,n,(function(t){return e(),null}))||this}return d(n,t),n}(p),b=function(t){function n(n,e){return t.call(this,setInterval,v,n,(function(t){return e(),t}))||this}return d(n,t),n}(p),m={now:function(){return Date.now?Date.now():(new Date).valueOf()},defer:function(t){return new g(0,t)},method:function(t){for(var n=[],e=1;e0)for(r=0;r=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}},$=Q,tt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),nt=function(t){function n(n,e){var r=t.call(this)||this;return r.id=n,r.transport=e,r.activityTimeout=e.activityTimeout,r.bindListeners(),r}return tt(n,t),n.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},n.prototype.send=function(t){return this.transport.send(t)},n.prototype.send_event=function(t,n,e){var r={event:t,data:n};return e&&(r.channel=e),B.debug("Event sent",r),this.send($.encodeMessage(r))},n.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},n.prototype.close=function(){this.transport.close()},n.prototype.bindListeners=function(){var t=this,n={message:function(n){var e;try{e=$.decodeMessage(n)}catch(e){t.emit("error",{type:"MessageParseError",error:e,data:n.data})}if(void 0!==e){switch(B.debug("Event recd",e),e.event){case"pusher:error":t.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":t.emit("ping");break;case"pusher:pong":t.emit("pong")}t.emit("message",e)}},activity:function(){t.emit("activity")},error:function(n){t.emit("error",n)},closed:function(n){e(),n&&n.code&&t.handleCloseEvent(n),t.transport=null,t.emit("closed")}},e=function(){k(n,(function(n,e){t.transport.unbind(e,n)}))};k(n,(function(n,e){t.transport.bind(e,n)}))},n.prototype.handleCloseEvent=function(t){var n=$.getCloseAction(t),e=$.getCloseError(t);e&&this.emit("error",e),n&&this.emit(n,{action:n,error:e})},n}(H),et=function(){function t(t,n){this.transport=t,this.callback=n,this.bindListeners()}return t.prototype.close=function(){this.unbindListeners(),this.transport.close()},t.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){var e;t.unbindListeners();try{e=$.processHandshake(n)}catch(n){return t.finish("error",{error:n}),void t.transport.close()}"connected"===e.action?t.finish("connected",{connection:new nt(e.id,t.transport),activityTimeout:e.activityTimeout}):(t.finish(e.action,{error:e.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var e=$.getCloseAction(n)||"backoff",r=$.getCloseError(n);t.finish(e,{error:r})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},t.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},t.prototype.finish=function(t,n){this.callback(_({transport:this.transport,action:t},n))},t}(),rt=function(){function t(t,n){this.timeline=t,this.options=n||{}}return t.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(an.TimelineTransport.getAgent(this,t),n)},t}(),ot=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),it=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),st=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),at=(function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}ot(n,t)}(Error),function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error)),ct=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),ut=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),ht=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),ft=function(t){function n(n){var e=this.constructor,r=t.call(this,n)||this;return Object.setPrototypeOf(r,e.prototype),r}return ot(n,t),n}(Error),lt=function(t){function n(n,e){var r=this.constructor,o=t.call(this,e)||this;return o.status=n,Object.setPrototypeOf(o,r.prototype),o}return ot(n,t),n}(Error),pt={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},dt=function(t){var n,e=pt.urls[t];return e?(e.fullUrl?n=e.fullUrl:e.path&&(n=pt.baseUrl+e.path),n?"See: "+n:""):""},yt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),vt=function(t){function n(n,e){var r=t.call(this,(function(t,e){B.debug("No callbacks on "+n+" for "+t)}))||this;return r.name=n,r.pusher=e,r.subscribed=!1,r.subscriptionPending=!1,r.subscriptionCancelled=!1,r}return yt(n,t),n.prototype.authorize=function(t,n){return n(null,{auth:""})},n.prototype.trigger=function(t,n){if(0!==t.indexOf("client-"))throw new it("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var e=dt("triggeringClientEvents");B.warn("Client event triggered before channel 'subscription_succeeded' event . "+e)}return this.pusher.send_event(t,n,this.name)},n.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},n.prototype.handleEvent=function(t){var n=t.event,e=t.data;if("pusher_internal:subscription_succeeded"===n)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===n)this.handleSubscriptionCountEvent(t);else if(0!==n.indexOf("pusher_internal:")){this.emit(n,e,{})}},n.prototype.handleSubscriptionSucceededEvent=function(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)},n.prototype.handleSubscriptionCountEvent=function(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)},n.prototype.subscribe=function(){var t=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(function(n,e){n?(t.subscriptionPending=!1,B.error(n.toString()),t.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:n.message},n instanceof lt?{status:n.status}:{}))):t.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:t.name})})))},n.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},n.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},n.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},n}(H),gt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),bt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return gt(n,t),n.prototype.authorize=function(t,n){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},n)},n}(vt),mt=function(){function t(){this.reset()}return t.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},t.prototype.each=function(t){var n=this;k(this.members,(function(e,r){t(n.get(r))}))},t.prototype.setMyID=function(t){this.myID=t},t.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},t.prototype.addMember=function(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},t.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},t.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},t}(),_t=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),wt=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}c((r=r.apply(t,n||[])).next())}))},St=function(t,n){var e,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(e)throw new TypeError("Generator is already executing.");for(;s;)try{if(e=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new g(t||0,(function(){n.disconnectInternally(),n.connect()}))},n.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},n.prototype.setUnavailableTimer=function(){var t=this;this.unavailableTimer=new g(this.options.unavailableTimeout,(function(){t.updateState("unavailable")}))},n.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},n.prototype.sendActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new g(this.options.pongTimeout,(function(){t.timeline.error({pong_timed_out:t.options.pongTimeout}),t.retryIn(0)}))},n.prototype.resetActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new g(this.activityTimeout,(function(){t.sendActivityCheck()})))},n.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},n.prototype.buildConnectionCallbacks=function(t){var n=this;return _({},t,{message:function(t){n.resetActivityCheck(),n.emit("message",t)},ping:function(){n.send_event("pusher:pong",{})},activity:function(){n.resetActivityCheck()},error:function(t){n.emit("error",t)},closed:function(){n.abandonConnection(),n.shouldRetry()&&n.retryIn(1e3)}})},n.prototype.buildHandshakeCallbacks=function(t){var n=this;return _({},t,{connected:function(t){n.activityTimeout=Math.min(n.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),n.clearUnavailableTimer(),n.setConnection(t.connection),n.socket_id=n.connection.id,n.updateState("connected",{socket_id:n.socket_id})}})},n.prototype.buildErrorCallbacks=function(){var t=this,n=function(n){return function(e){e.error&&t.emit("error",{type:"WebSocketError",error:e.error}),n(e)}};return{tls_only:n((function(){t.usingTLS=!0,t.updateStrategy(),t.retryIn(0)})),refused:n((function(){t.disconnect()})),backoff:n((function(){t.retryIn(1e3)})),retry:n((function(){t.retryIn(0)}))}},n.prototype.setConnection=function(t){for(var n in this.connection=t,this.connectionCallbacks)this.connection.bind(n,this.connectionCallbacks[n]);this.resetActivityCheck()},n.prototype.abandonConnection=function(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var n=this.connection;return this.connection=null,n}},n.prototype.updateState=function(t,n){var e=this.state;if(this.state=t,e!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+n.socket_id),B.debug("State changed",e+" -> "+r),this.timeline.info({state:t,params:n}),this.emit("state_change",{previous:e,current:t}),this.emit(t,n)}},n.prototype.shouldRetry=function(){return"connecting"===this.state||"connected"===this.state},n}(H),xt=function(){function t(){this.channels={}}return t.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=function(t,n){if(0===t.indexOf("private-encrypted-")){if(n.config.nacl)return Lt.createEncryptedChannel(t,n,n.config.nacl);var e=dt("encryptedChannelSupport");throw new ut("Tried to subscribe to a private-encrypted- channel but no nacl implementation available. "+e)}if(0===t.indexOf("private-"))return Lt.createPrivateChannel(t,n);if(0===t.indexOf("presence-"))return Lt.createPresenceChannel(t,n);if(0===t.indexOf("#"))throw new st('Cannot create a channel with name "'+t+'".');return Lt.createChannel(t,n)}(t,n)),this.channels[t]},t.prototype.all=function(){return function(t){var n=[];return k(t,(function(t){n.push(t)})),n}(this.channels)},t.prototype.find=function(t){return this.channels[t]},t.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},t.prototype.disconnect=function(){k(this.channels,(function(t){t.disconnect()}))},t}();var Lt={createChannels:function(){return new xt},createConnectionManager:function(t,n){return new Et(t,n)},createChannel:function(t,n){return new vt(t,n)},createPrivateChannel:function(t,n){return new bt(t,n)},createPresenceChannel:function(t,n){return new kt(t,n)},createEncryptedChannel:function(t,n,e){return new Ot(t,n,e)},createTimelineSender:function(t,n){return new rt(t,n)},createHandshake:function(t,n){return new et(t,n)},createAssistantToTheTransportManager:function(t,n,e){return new Z(t,n,e)}},Ut=function(){function t(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return t.prototype.getAssistant=function(t){return Lt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},t.prototype.isAlive=function(){return this.livesLeft>0},t.prototype.reportDeath=function(){this.livesLeft-=1},t}(),Rt=function(){function t(t,n){this.strategies=t,this.loop=Boolean(n.loop),this.failFast=Boolean(n.failFast),this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return t.prototype.isSupported=function(){return E(this.strategies,m.method("isSupported"))},t.prototype.connect=function(t,n){var e=this,r=this.strategies,o=0,i=this.timeout,s=null,a=function(c,u){u?n(null,u):(o+=1,e.loop&&(o%=r.length),o0&&(o=new g(e.timeout,(function(){i.abort(),r(!0)}))),i=t.connect(n,(function(t,n){t&&o&&o.isRunning()&&!e.failFast||(o&&o.ensureAborted(),r(t,n))})),{abort:function(){o&&o.ensureAborted(),i.abort()},forceMinPriority:function(t){i.forceMinPriority(t)}}},t}(),jt=function(){function t(t){this.strategies=t}return t.prototype.isSupported=function(){return E(this.strategies,m.method("isSupported"))},t.prototype.connect=function(t,n){return function(t,n,e){var r=P(t,(function(t,r,o,i){return t.connect(n,e(r,i))}));return{abort:function(){T(r,Mt)},forceMinPriority:function(t){T(r,(function(n){n.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,e){return function(r,o){e[t].error=r,r?function(t){return function(t,n){for(var e=0;e=m.now()){var i=this.transports[r.transport];i&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),o.push(new Rt([i],{timeout:2*r.latency+1e3,failFast:!0})))}var s=m.now(),a=o.pop().connect(t,(function r(i,c){i?(Dt(e),o.length>0?(s=m.now(),a=o.pop().connect(t,r)):n(i)):(!function(t,n,e){var r=an.getLocalStorage();if(r)try{r[Nt(t)]=U({timestamp:m.now(),transport:n,latency:e})}catch(t){}}(e,c.transport.name,m.now()-s),n(null,c))}));return{abort:function(){a.abort()},forceMinPriority:function(n){t=n,a&&a.forceMinPriority(n)}}},t}();function Nt(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function Dt(t){var n=an.getLocalStorage();if(n)try{delete n[Nt(t)]}catch(t){}}var zt=function(){function t(t,n){var e=n.delay;this.strategy=t,this.options={delay:e}}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e,r=this.strategy,o=new g(this.options.delay,(function(){e=r.connect(t,n)}));return{abort:function(){o.ensureAborted(),e&&e.abort()},forceMinPriority:function(n){t=n,e&&e.forceMinPriority(n)}}},t}(),Ht=function(){function t(t,n,e){this.test=t,this.trueBranch=n,this.falseBranch=e}return t.prototype.isSupported=function(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()},t.prototype.connect=function(t,n){return(this.test()?this.trueBranch:this.falseBranch).connect(t,n)},t}(),Bt=function(){function t(t){this.strategy=t}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,n){var e=this.strategy.connect(t,(function(t,r){r&&e.abort(),n(t,r)}));return e},t}();function Ft(t){return function(){return t.isSupported()}}var qt,Yt=function(t,n,e){var r={};function o(n,o,i,s,a){var c=e(t,n,o,i,s,a);return r[n]=c,c}var i,s=Object.assign({},n,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=_({},s,{useTLS:!0}),c=Object.assign({},n,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),u={loop:!0,timeout:15e3,timeoutLimit:6e4},h=new Ut({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),f=new Ut({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=o("ws","ws",3,s,h),p=o("wss","ws",3,a,h),d=o("xhr_streaming","xhr_streaming",1,c,f),y=o("xhr_polling","xhr_polling",1,c),v=new Rt([l],u),g=new Rt([p],u),b=new Rt([d],u),m=new Rt([y],u),w=new Rt([new Ht(Ft(b),new jt([b,new zt(m,{delay:4e3})]),m)],u);return i=n.useTLS?new jt([v,new zt(w,{delay:2e3})]):new jt([v,new zt(g,{delay:2e3}),new zt(w,{delay:5e3})]),new It(new Bt(new Ht(Ft(l),i,w)),r,{ttl:18e5,timeline:n.timeline,useTLS:n.useTLS})},Kt=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),Jt=function(t){function n(n,e,r){var o=t.call(this)||this;return o.hooks=n,o.method=e,o.url=r,o}return Kt(n,t),n.prototype.start=function(t){var n=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){n.close()},an.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)},n.prototype.close=function(){this.unloader&&(an.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},n.prototype.onChunk=function(t,n){for(;;){var e=this.advanceBuffer(n);if(!e)break;this.emit("chunk",{status:t,data:e})}this.isBufferTooLong(n)&&this.emit("buffer_too_long")},n.prototype.advanceBuffer=function(t){var n=t.slice(this.position),e=n.indexOf("\n");return-1!==e?(this.position+=e+1,n.slice(0,e)):null},n.prototype.isBufferTooLong=function(t){return this.position===t.length&&t.length>262144},n}(H);!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(qt||(qt={}));var Wt=qt,Xt=1;function Gt(t){var n=-1===t.indexOf("?")?"?":"&";return t+n+"t="+ +new Date+"&n="+Xt++}function Vt(t){return an.randomInt(t)}var Zt,Qt=function(){function t(t,n){this.hooks=t,this.session=Vt(1e3)+"/"+function(t){for(var n=[],e=0;e0&&t.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&t.onChunk(n.status,n.responseText),t.emit("finished",n.status),t.close()}},n},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},en={getDefaultStrategy:Yt,Transports:V,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket:function(t){return this.createSocket($t,t)},createPollingSocket:function(t){return this.createSocket(tn,t)},createSocket:function(t,n){return new Qt(t,n)},createXHR:function(t,n){return this.createRequest(nn,t,n)},createRequest:function(t,n,e){return new Jt(t,n,e)}},setup:function(t){t.ready()},getLocalStorage:function(){},getClientFeatures:function(){return C(A({ws:V.ws},(function(t){return t.isSupported({})})))},getProtocol:function(){return"http:"},isXHRSupported:function(){return!0},createSocketRequest:function(t,n){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,n);throw"Cross-origin HTTP requests are not supported"},createXHR:function(){return new(this.getXHRAPI())},createWebSocket:function(t){return new(this.getWebSocketAPI())(t)},addUnloadListener:function(t){},removeUnloadListener:function(t){}},rn=function(){var t=function(n,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(n,e)};return function(n,e){function r(){this.constructor=n}t(n,e),n.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}}(),on=new(function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return rn(n,t),n.prototype.isOnline=function(){return!0},n}(H)),sn=function(t,n,e,r,o){var i=new Headers;for(var s in i.set("Content-Type","application/x-www-form-urlencoded"),e.headers)i.set(s,e.headers[s]);if(null!=e.headersProvider){var a=e.headersProvider();for(var s in a)i.set(s,a[s])}var c=n,u=new Request(e.endpoint,{headers:i,body:c,credentials:"same-origin",method:"POST"});return fetch(u).then((function(t){var n=t.status;if(200===n)return t.text();throw new lt(n,"Could not get "+r.toString()+" info from your auth endpoint, status: "+n)})).then((function(t){var n;try{n=JSON.parse(t)}catch(n){throw new lt(200,"JSON returned from "+r.toString()+" endpoint was invalid, yet status code was 200. Data was: "+t)}o(null,n)})).catch((function(t){o(t,null)}))},an={getDefaultStrategy:en.getDefaultStrategy,Transports:en.Transports,setup:en.setup,getProtocol:en.getProtocol,isXHRSupported:en.isXHRSupported,getLocalStorage:en.getLocalStorage,createXHR:en.createXHR,createWebSocket:en.createWebSocket,addUnloadListener:en.addUnloadListener,removeUnloadListener:en.removeUnloadListener,transportConnectionInitializer:en.transportConnectionInitializer,createSocketRequest:en.createSocketRequest,HTTPFactory:en.HTTPFactory,TimelineTransport:{name:"xhr",getAgent:function(t,n){return function(e,r){var o="http"+(n?"s":"")+"://"+(t.host||t.options.host)+t.options.path,i=L(e);fetch(o+="/2?"+i).then((function(t){if(200!==t.status)throw"received "+t.status+" from stats.pusher.com";return t.json()})).then((function(n){var e=n.host;e&&(t.host=e)})).catch((function(t){B.debug("TimelineSender Error: ",t)}))}}},getAuthorizers:function(){return{ajax:sn}},getWebSocketAPI:function(){return WebSocket},getXHRAPI:function(){return XMLHttpRequest},getNetwork:function(){return on},randomInt:function(t){return Math.floor((globalThis.crypto||globalThis.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)}};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(Zt||(Zt={}));var cn=Zt,un=function(){function t(t,n,e){this.key=t,this.session=n,this.events=[],this.options=e||{},this.sent=0,this.uniqueID=0}return t.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(_({},n,{timestamp:m.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},t.prototype.error=function(t){this.log(cn.ERROR,t)},t.prototype.info=function(t){this.log(cn.INFO,t)},t.prototype.debug=function(t){this.log(cn.DEBUG,t)},t.prototype.isEmpty=function(){return 0===this.events.length},t.prototype.send=function(t,n){var e=this,r=_({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(r,(function(t,r){t||e.sent++,n&&n(t,r)})),!0},t.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},t}(),hn=function(){function t(t,n,e,r){this.name=t,this.priority=n,this.transport=e,this.options=r||{}}return t.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},t.prototype.connect=function(t,n){var e=this;if(!this.isSupported())return fn(new ft,n);if(this.priority>>18&63),e+=this._encodeByte(r>>>12&63),e+=this._encodeByte(r>>>6&63),e+=this._encodeByte(r>>>0&63)}var i=t.length-n;if(i>0){r=t[n]<<16|(2===i?t[n+1]<<8:0);e+=this._encodeByte(r>>>18&63),e+=this._encodeByte(r>>>12&63),e+=2===i?this._encodeByte(r>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,r=new Uint8Array(this.maxDecodedLength(n)),i=0,s=0,o=0,a=0,h=0,c=0,u=0;s>>4,r[i++]=h<<4|c>>>2,r[i++]=c<<6|u,o|=256&a,o|=256&h,o|=256&c,o|=256&u;if(s>>4,o|=256&a,o|=256&h),s>>2,o|=256&c),s>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=s;var o=new s;e.encode=function(t){return o.encode(t)},e.decode=function(t){return o.decode(t)};var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(s);e.URLSafeCoder=a;var h=new a;e.encodeURLSafe=function(t){return h.encode(t)},e.decodeURLSafe=function(t){return h.decode(t)},e.encodedLength=function(t){return o.encodedLength(t)},e.maxDecodedLength=function(t){return o.maxDecodedLength(t)},e.decodedLength=function(t){return o.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="utf8: invalid source encoding";function i(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(i(t)),n=0,r=0;r>6,e[n++]=128|63&s):s<55296?(e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s):(r++,s=(1023&s)<<10,s|=1023&t.charCodeAt(r),s+=65536,e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s)}return e},e.encodedLength=i,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(r);if(128!=(192&(o=t[++n])))throw new Error(r);i=(31&i)<<6|63&o,s=128}else if(i<240){if(n>=t.length-1)throw new Error(r);var o=t[++n],a=t[++n];if(128!=(192&o)||128!=(192&a))throw new Error(r);i=(15&i)<<12|(63&o)<<6|63&a,s=2048}else{if(!(i<248))throw new Error(r);if(n>=t.length-2)throw new Error(r);o=t[++n],a=t[++n];var h=t[++n];if(128!=(192&o)||128!=(192&a)||128!=(192&h))throw new Error(r);i=(15&i)<<18|(63&o)<<12|(63&a)<<6|63&h,s=65536}if(i=55296&&i<=57343)throw new Error(r);if(i>=65536){if(i>1114111)throw new Error(r);i-=65536,e.push(String.fromCharCode(55296|i>>10)),i=56320|1023&i}}e.push(String.fromCharCode(i))}return e.join("")}},function(t,e,n){!function(t){"use strict";var e=function(t){var e,n=new Float64Array(16);if(t)for(e=0;e>24&255,t[e+1]=n>>16&255,t[e+2]=n>>8&255,t[e+3]=255&n,t[e+4]=r>>24&255,t[e+5]=r>>16&255,t[e+6]=r>>8&255,t[e+7]=255&r}function g(t,e,n,r,i){var s,o=0;for(s=0;s>>8)-1}function b(t,e,n,r){return g(t,e,n,r,16)}function v(t,e,n,r){return g(t,e,n,r,32)}function y(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,c=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,f=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,b=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,v=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=s,S=o,k=a,C=h,T=c,P=u,A=l,E=d,x=p,O=f,L=g,U=b,R=v,M=y,I=m,N=w,D=0;D<20;D+=2)_^=(i=(R^=(i=(x^=(i=(T^=(i=_+R|0)<<7|i>>>25)+_|0)<<9|i>>>23)+T|0)<<13|i>>>19)+x|0)<<18|i>>>14,P^=(i=(S^=(i=(M^=(i=(O^=(i=P+S|0)<<7|i>>>25)+P|0)<<9|i>>>23)+O|0)<<13|i>>>19)+M|0)<<18|i>>>14,L^=(i=(A^=(i=(k^=(i=(I^=(i=L+A|0)<<7|i>>>25)+L|0)<<9|i>>>23)+I|0)<<13|i>>>19)+k|0)<<18|i>>>14,N^=(i=(U^=(i=(E^=(i=(C^=(i=N+U|0)<<7|i>>>25)+N|0)<<9|i>>>23)+C|0)<<13|i>>>19)+E|0)<<18|i>>>14,_^=(i=(C^=(i=(k^=(i=(S^=(i=_+C|0)<<7|i>>>25)+_|0)<<9|i>>>23)+S|0)<<13|i>>>19)+k|0)<<18|i>>>14,P^=(i=(T^=(i=(E^=(i=(A^=(i=P+T|0)<<7|i>>>25)+P|0)<<9|i>>>23)+A|0)<<13|i>>>19)+E|0)<<18|i>>>14,L^=(i=(O^=(i=(x^=(i=(U^=(i=L+O|0)<<7|i>>>25)+L|0)<<9|i>>>23)+U|0)<<13|i>>>19)+x|0)<<18|i>>>14,N^=(i=(I^=(i=(M^=(i=(R^=(i=N+I|0)<<7|i>>>25)+N|0)<<9|i>>>23)+R|0)<<13|i>>>19)+M|0)<<18|i>>>14;_=_+s|0,S=S+o|0,k=k+a|0,C=C+h|0,T=T+c|0,P=P+u|0,A=A+l|0,E=E+d|0,x=x+p|0,O=O+f|0,L=L+g|0,U=U+b|0,R=R+v|0,M=M+y|0,I=I+m|0,N=N+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=S>>>0&255,t[5]=S>>>8&255,t[6]=S>>>16&255,t[7]=S>>>24&255,t[8]=k>>>0&255,t[9]=k>>>8&255,t[10]=k>>>16&255,t[11]=k>>>24&255,t[12]=C>>>0&255,t[13]=C>>>8&255,t[14]=C>>>16&255,t[15]=C>>>24&255,t[16]=T>>>0&255,t[17]=T>>>8&255,t[18]=T>>>16&255,t[19]=T>>>24&255,t[20]=P>>>0&255,t[21]=P>>>8&255,t[22]=P>>>16&255,t[23]=P>>>24&255,t[24]=A>>>0&255,t[25]=A>>>8&255,t[26]=A>>>16&255,t[27]=A>>>24&255,t[28]=E>>>0&255,t[29]=E>>>8&255,t[30]=E>>>16&255,t[31]=E>>>24&255,t[32]=x>>>0&255,t[33]=x>>>8&255,t[34]=x>>>16&255,t[35]=x>>>24&255,t[36]=O>>>0&255,t[37]=O>>>8&255,t[38]=O>>>16&255,t[39]=O>>>24&255,t[40]=L>>>0&255,t[41]=L>>>8&255,t[42]=L>>>16&255,t[43]=L>>>24&255,t[44]=U>>>0&255,t[45]=U>>>8&255,t[46]=U>>>16&255,t[47]=U>>>24&255,t[48]=R>>>0&255,t[49]=R>>>8&255,t[50]=R>>>16&255,t[51]=R>>>24&255,t[52]=M>>>0&255,t[53]=M>>>8&255,t[54]=M>>>16&255,t[55]=M>>>24&255,t[56]=I>>>0&255,t[57]=I>>>8&255,t[58]=I>>>16&255,t[59]=I>>>24&255,t[60]=N>>>0&255,t[61]=N>>>8&255,t[62]=N>>>16&255,t[63]=N>>>24&255}(t,e,n,r)}function m(t,e,n,r){!function(t,e,n,r){for(var i,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,c=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,f=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,g=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,b=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,v=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,y=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,m=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,w=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,_=0;_<20;_+=2)s^=(i=(v^=(i=(p^=(i=(c^=(i=s+v|0)<<7|i>>>25)+s|0)<<9|i>>>23)+c|0)<<13|i>>>19)+p|0)<<18|i>>>14,u^=(i=(o^=(i=(y^=(i=(f^=(i=u+o|0)<<7|i>>>25)+u|0)<<9|i>>>23)+f|0)<<13|i>>>19)+y|0)<<18|i>>>14,g^=(i=(l^=(i=(a^=(i=(m^=(i=g+l|0)<<7|i>>>25)+g|0)<<9|i>>>23)+m|0)<<13|i>>>19)+a|0)<<18|i>>>14,w^=(i=(b^=(i=(d^=(i=(h^=(i=w+b|0)<<7|i>>>25)+w|0)<<9|i>>>23)+h|0)<<13|i>>>19)+d|0)<<18|i>>>14,s^=(i=(h^=(i=(a^=(i=(o^=(i=s+h|0)<<7|i>>>25)+s|0)<<9|i>>>23)+o|0)<<13|i>>>19)+a|0)<<18|i>>>14,u^=(i=(c^=(i=(d^=(i=(l^=(i=u+c|0)<<7|i>>>25)+u|0)<<9|i>>>23)+l|0)<<13|i>>>19)+d|0)<<18|i>>>14,g^=(i=(f^=(i=(p^=(i=(b^=(i=g+f|0)<<7|i>>>25)+g|0)<<9|i>>>23)+b|0)<<13|i>>>19)+p|0)<<18|i>>>14,w^=(i=(m^=(i=(y^=(i=(v^=(i=w+m|0)<<7|i>>>25)+w|0)<<9|i>>>23)+v|0)<<13|i>>>19)+y|0)<<18|i>>>14;t[0]=s>>>0&255,t[1]=s>>>8&255,t[2]=s>>>16&255,t[3]=s>>>24&255,t[4]=u>>>0&255,t[5]=u>>>8&255,t[6]=u>>>16&255,t[7]=u>>>24&255,t[8]=g>>>0&255,t[9]=g>>>8&255,t[10]=g>>>16&255,t[11]=g>>>24&255,t[12]=w>>>0&255,t[13]=w>>>8&255,t[14]=w>>>16&255,t[15]=w>>>24&255,t[16]=l>>>0&255,t[17]=l>>>8&255,t[18]=l>>>16&255,t[19]=l>>>24&255,t[20]=d>>>0&255,t[21]=d>>>8&255,t[22]=d>>>16&255,t[23]=d>>>24&255,t[24]=p>>>0&255,t[25]=p>>>8&255,t[26]=p>>>16&255,t[27]=p>>>24&255,t[28]=f>>>0&255,t[29]=f>>>8&255,t[30]=f>>>16&255,t[31]=f>>>24&255}(t,e,n,r)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function _(t,e,n,r,i,s,o){var a,h,c=new Uint8Array(16),u=new Uint8Array(64);for(h=0;h<16;h++)c[h]=0;for(h=0;h<8;h++)c[h]=s[h];for(;i>=64;){for(y(u,c,o,w),h=0;h<64;h++)t[e+h]=n[r+h]^u[h];for(a=1,h=8;h<16;h++)a=a+(255&c[h])|0,c[h]=255&a,a>>>=8;i-=64,e+=64,r+=64}if(i>0)for(y(u,c,o,w),h=0;h=64;){for(y(h,a,i,w),o=0;o<64;o++)t[e+o]=h[o];for(s=1,o=8;o<16;o++)s=s+(255&a[o])|0,a[o]=255&s,s>>>=8;n-=64,e+=64}if(n>0)for(y(h,a,i,w),o=0;o>>13|n<<3),r=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(n>>>10|r<<6),i=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(r>>>7|i<<9),s=255&t[8]|(255&t[9])<<8,this.r[4]=255&(i>>>4|s<<12),this.r[5]=s>>>1&8190,o=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(s>>>14|o<<2),a=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(o>>>11|a<<5),h=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(a>>>8|h<<8),this.r[9]=h>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};function P(t,e,n,r,i,s){var o=new T(s);return o.update(n,r,i),o.finish(t,e),0}function A(t,e,n,r,i,s){var o=new Uint8Array(16);return P(o,0,n,r,i,s),b(t,e,o,0)}function E(t,e,n,r,i){var s;if(n<32)return-1;for(C(t,0,e,0,n,r,i),P(t,16,t,32,n-32,t),s=0;s<16;s++)t[s]=0;return 0}function x(t,e,n,r,i){var s,o=new Uint8Array(32);if(n<32)return-1;if(k(o,0,32,r,i),0!==A(e,16,e,32,n-32,o))return-1;for(C(t,0,e,0,n,r,i),s=0;s<32;s++)t[s]=0;return 0}function O(t,e){var n;for(n=0;n<16;n++)t[n]=0|e[n]}function L(t){var e,n,r=1;for(e=0;e<16;e++)n=t[e]+r+65535,r=Math.floor(n/65536),t[e]=n-65536*r;t[0]+=r-1+37*(r-1)}function U(t,e,n){for(var r,i=~(n-1),s=0;s<16;s++)r=i&(t[s]^e[s]),t[s]^=r,e[s]^=r}function R(t,n){var r,i,s,o=e(),a=e();for(r=0;r<16;r++)a[r]=n[r];for(L(a),L(a),L(a),i=0;i<2;i++){for(o[0]=a[0]-65517,r=1;r<15;r++)o[r]=a[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),s=o[15]>>16&1,o[14]&=65535,U(a,o,1-s)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function M(t,e){var n=new Uint8Array(32),r=new Uint8Array(32);return R(n,t),R(r,e),v(n,0,r,0)}function I(t){var e=new Uint8Array(32);return R(e,t),1&e[0]}function N(t,e){var n;for(n=0;n<16;n++)t[n]=e[2*n]+(e[2*n+1]<<8);t[15]&=32767}function D(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]+n[r]}function j(t,e,n){for(var r=0;r<16;r++)t[r]=e[r]-n[r]}function z(t,e,n){var r,i,s=0,o=0,a=0,h=0,c=0,u=0,l=0,d=0,p=0,f=0,g=0,b=0,v=0,y=0,m=0,w=0,_=0,S=0,k=0,C=0,T=0,P=0,A=0,E=0,x=0,O=0,L=0,U=0,R=0,M=0,I=0,N=n[0],D=n[1],j=n[2],z=n[3],H=n[4],B=n[5],F=n[6],q=n[7],Y=n[8],K=n[9],$=n[10],J=n[11],W=n[12],X=n[13],G=n[14],V=n[15];s+=(r=e[0])*N,o+=r*D,a+=r*j,h+=r*z,c+=r*H,u+=r*B,l+=r*F,d+=r*q,p+=r*Y,f+=r*K,g+=r*$,b+=r*J,v+=r*W,y+=r*X,m+=r*G,w+=r*V,o+=(r=e[1])*N,a+=r*D,h+=r*j,c+=r*z,u+=r*H,l+=r*B,d+=r*F,p+=r*q,f+=r*Y,g+=r*K,b+=r*$,v+=r*J,y+=r*W,m+=r*X,w+=r*G,_+=r*V,a+=(r=e[2])*N,h+=r*D,c+=r*j,u+=r*z,l+=r*H,d+=r*B,p+=r*F,f+=r*q,g+=r*Y,b+=r*K,v+=r*$,y+=r*J,m+=r*W,w+=r*X,_+=r*G,S+=r*V,h+=(r=e[3])*N,c+=r*D,u+=r*j,l+=r*z,d+=r*H,p+=r*B,f+=r*F,g+=r*q,b+=r*Y,v+=r*K,y+=r*$,m+=r*J,w+=r*W,_+=r*X,S+=r*G,k+=r*V,c+=(r=e[4])*N,u+=r*D,l+=r*j,d+=r*z,p+=r*H,f+=r*B,g+=r*F,b+=r*q,v+=r*Y,y+=r*K,m+=r*$,w+=r*J,_+=r*W,S+=r*X,k+=r*G,C+=r*V,u+=(r=e[5])*N,l+=r*D,d+=r*j,p+=r*z,f+=r*H,g+=r*B,b+=r*F,v+=r*q,y+=r*Y,m+=r*K,w+=r*$,_+=r*J,S+=r*W,k+=r*X,C+=r*G,T+=r*V,l+=(r=e[6])*N,d+=r*D,p+=r*j,f+=r*z,g+=r*H,b+=r*B,v+=r*F,y+=r*q,m+=r*Y,w+=r*K,_+=r*$,S+=r*J,k+=r*W,C+=r*X,T+=r*G,P+=r*V,d+=(r=e[7])*N,p+=r*D,f+=r*j,g+=r*z,b+=r*H,v+=r*B,y+=r*F,m+=r*q,w+=r*Y,_+=r*K,S+=r*$,k+=r*J,C+=r*W,T+=r*X,P+=r*G,A+=r*V,p+=(r=e[8])*N,f+=r*D,g+=r*j,b+=r*z,v+=r*H,y+=r*B,m+=r*F,w+=r*q,_+=r*Y,S+=r*K,k+=r*$,C+=r*J,T+=r*W,P+=r*X,A+=r*G,E+=r*V,f+=(r=e[9])*N,g+=r*D,b+=r*j,v+=r*z,y+=r*H,m+=r*B,w+=r*F,_+=r*q,S+=r*Y,k+=r*K,C+=r*$,T+=r*J,P+=r*W,A+=r*X,E+=r*G,x+=r*V,g+=(r=e[10])*N,b+=r*D,v+=r*j,y+=r*z,m+=r*H,w+=r*B,_+=r*F,S+=r*q,k+=r*Y,C+=r*K,T+=r*$,P+=r*J,A+=r*W,E+=r*X,x+=r*G,O+=r*V,b+=(r=e[11])*N,v+=r*D,y+=r*j,m+=r*z,w+=r*H,_+=r*B,S+=r*F,k+=r*q,C+=r*Y,T+=r*K,P+=r*$,A+=r*J,E+=r*W,x+=r*X,O+=r*G,L+=r*V,v+=(r=e[12])*N,y+=r*D,m+=r*j,w+=r*z,_+=r*H,S+=r*B,k+=r*F,C+=r*q,T+=r*Y,P+=r*K,A+=r*$,E+=r*J,x+=r*W,O+=r*X,L+=r*G,U+=r*V,y+=(r=e[13])*N,m+=r*D,w+=r*j,_+=r*z,S+=r*H,k+=r*B,C+=r*F,T+=r*q,P+=r*Y,A+=r*K,E+=r*$,x+=r*J,O+=r*W,L+=r*X,U+=r*G,R+=r*V,m+=(r=e[14])*N,w+=r*D,_+=r*j,S+=r*z,k+=r*H,C+=r*B,T+=r*F,P+=r*q,A+=r*Y,E+=r*K,x+=r*$,O+=r*J,L+=r*W,U+=r*X,R+=r*G,M+=r*V,w+=(r=e[15])*N,o+=38*(S+=r*j),a+=38*(k+=r*z),h+=38*(C+=r*H),c+=38*(T+=r*B),u+=38*(P+=r*F),l+=38*(A+=r*q),d+=38*(E+=r*Y),p+=38*(x+=r*K),f+=38*(O+=r*$),g+=38*(L+=r*J),b+=38*(U+=r*W),v+=38*(R+=r*X),y+=38*(M+=r*G),m+=38*(I+=r*V),s=(r=(s+=38*(_+=r*D))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s=(r=(s+=i-1+37*(i-1))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),o=(r=o+i+65535)-65536*(i=Math.floor(r/65536)),a=(r=a+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),w=(r=w+i+65535)-65536*(i=Math.floor(r/65536)),s+=i-1+37*(i-1),t[0]=s,t[1]=o,t[2]=a,t[3]=h,t[4]=c,t[5]=u,t[6]=l,t[7]=d,t[8]=p,t[9]=f,t[10]=g,t[11]=b,t[12]=v,t[13]=y,t[14]=m,t[15]=w}function H(t,e){z(t,e,e)}function B(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=253;r>=0;r--)H(i,i),2!==r&&4!==r&&z(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function F(t,n){var r,i=e();for(r=0;r<16;r++)i[r]=n[r];for(r=250;r>=0;r--)H(i,i),1!==r&&z(i,i,n);for(r=0;r<16;r++)t[r]=i[r]}function q(t,n,r){var i,s,o=new Uint8Array(32),a=new Float64Array(80),c=e(),u=e(),l=e(),d=e(),p=e(),f=e();for(s=0;s<31;s++)o[s]=n[s];for(o[31]=127&n[31]|64,o[0]&=248,N(a,r),s=0;s<16;s++)u[s]=a[s],d[s]=c[s]=l[s]=0;for(c[0]=d[0]=1,s=254;s>=0;--s)U(c,u,i=o[s>>>3]>>>(7&s)&1),U(l,d,i),D(p,c,l),j(c,c,l),D(l,u,d),j(u,u,d),H(d,p),H(f,c),z(c,l,c),z(l,u,p),D(p,c,l),j(c,c,l),H(u,c),j(l,d,f),z(c,l,h),D(c,c,d),z(l,l,c),z(c,d,f),z(d,u,a),H(u,p),U(c,u,i),U(l,d,i);for(s=0;s<16;s++)a[s+16]=c[s],a[s+32]=l[s],a[s+48]=u[s],a[s+64]=d[s];var g=a.subarray(32),b=a.subarray(16);return B(g,g),z(b,b,g),R(t,b),0}function Y(t,e){return q(t,e,s)}function K(t,e){return r(e,32),Y(t,e)}function $(t,e,n){var r=new Uint8Array(32);return q(r,n,e),m(t,i,r,w)}T.prototype.blocks=function(t,e,n){for(var r,i,s,o,a,h,c,u,l,d,p,f,g,b,v,y,m,w,_,S=this.fin?0:2048,k=this.h[0],C=this.h[1],T=this.h[2],P=this.h[3],A=this.h[4],E=this.h[5],x=this.h[6],O=this.h[7],L=this.h[8],U=this.h[9],R=this.r[0],M=this.r[1],I=this.r[2],N=this.r[3],D=this.r[4],j=this.r[5],z=this.r[6],H=this.r[7],B=this.r[8],F=this.r[9];n>=16;)d=l=0,d+=(k+=8191&(r=255&t[e+0]|(255&t[e+1])<<8))*R,d+=(C+=8191&(r>>>13|(i=255&t[e+2]|(255&t[e+3])<<8)<<3))*(5*F),d+=(T+=8191&(i>>>10|(s=255&t[e+4]|(255&t[e+5])<<8)<<6))*(5*B),d+=(P+=8191&(s>>>7|(o=255&t[e+6]|(255&t[e+7])<<8)<<9))*(5*H),l=(d+=(A+=8191&(o>>>4|(a=255&t[e+8]|(255&t[e+9])<<8)<<12))*(5*z))>>>13,d&=8191,d+=(E+=a>>>1&8191)*(5*j),d+=(x+=8191&(a>>>14|(h=255&t[e+10]|(255&t[e+11])<<8)<<2))*(5*D),d+=(O+=8191&(h>>>11|(c=255&t[e+12]|(255&t[e+13])<<8)<<5))*(5*N),d+=(L+=8191&(c>>>8|(u=255&t[e+14]|(255&t[e+15])<<8)<<8))*(5*I),p=l+=(d+=(U+=u>>>5|S)*(5*M))>>>13,p+=k*M,p+=C*R,p+=T*(5*F),p+=P*(5*B),l=(p+=A*(5*H))>>>13,p&=8191,p+=E*(5*z),p+=x*(5*j),p+=O*(5*D),p+=L*(5*N),l+=(p+=U*(5*I))>>>13,p&=8191,f=l,f+=k*I,f+=C*M,f+=T*R,f+=P*(5*F),l=(f+=A*(5*B))>>>13,f&=8191,f+=E*(5*H),f+=x*(5*z),f+=O*(5*j),f+=L*(5*D),g=l+=(f+=U*(5*N))>>>13,g+=k*N,g+=C*I,g+=T*M,g+=P*R,l=(g+=A*(5*F))>>>13,g&=8191,g+=E*(5*B),g+=x*(5*H),g+=O*(5*z),g+=L*(5*j),b=l+=(g+=U*(5*D))>>>13,b+=k*D,b+=C*N,b+=T*I,b+=P*M,l=(b+=A*R)>>>13,b&=8191,b+=E*(5*F),b+=x*(5*B),b+=O*(5*H),b+=L*(5*z),v=l+=(b+=U*(5*j))>>>13,v+=k*j,v+=C*D,v+=T*N,v+=P*I,l=(v+=A*M)>>>13,v&=8191,v+=E*R,v+=x*(5*F),v+=O*(5*B),v+=L*(5*H),y=l+=(v+=U*(5*z))>>>13,y+=k*z,y+=C*j,y+=T*D,y+=P*N,l=(y+=A*I)>>>13,y&=8191,y+=E*M,y+=x*R,y+=O*(5*F),y+=L*(5*B),m=l+=(y+=U*(5*H))>>>13,m+=k*H,m+=C*z,m+=T*j,m+=P*D,l=(m+=A*N)>>>13,m&=8191,m+=E*I,m+=x*M,m+=O*R,m+=L*(5*F),w=l+=(m+=U*(5*B))>>>13,w+=k*B,w+=C*H,w+=T*z,w+=P*j,l=(w+=A*D)>>>13,w&=8191,w+=E*N,w+=x*I,w+=O*M,w+=L*R,_=l+=(w+=U*(5*F))>>>13,_+=k*F,_+=C*B,_+=T*H,_+=P*z,l=(_+=A*j)>>>13,_&=8191,_+=E*D,_+=x*N,_+=O*I,_+=L*M,k=d=8191&(l=(l=((l+=(_+=U*R)>>>13)<<2)+l|0)+(d&=8191)|0),C=p+=l>>>=13,T=f&=8191,P=g&=8191,A=b&=8191,E=v&=8191,x=y&=8191,O=m&=8191,L=w&=8191,U=_&=8191,e+=16,n-=16;this.h[0]=k,this.h[1]=C,this.h[2]=T,this.h[3]=P,this.h[4]=A,this.h[5]=E,this.h[6]=x,this.h[7]=O,this.h[8]=L,this.h[9]=U},T.prototype.finish=function(t,e){var n,r,i,s,o=new Uint16Array(10);if(this.leftover){for(s=this.leftover,this.buffer[s++]=1;s<16;s++)this.buffer[s]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,s=2;s<10;s++)this.h[s]+=n,n=this.h[s]>>>13,this.h[s]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,o[0]=this.h[0]+5,n=o[0]>>>13,o[0]&=8191,s=1;s<10;s++)o[s]=this.h[s]+n,n=o[s]>>>13,o[s]&=8191;for(o[9]-=8192,r=(1^n)-1,s=0;s<10;s++)o[s]&=r;for(r=~r,s=0;s<10;s++)this.h[s]=this.h[s]&r|o[s];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,s=1;s<8;s++)i=(this.h[s]+this.pad[s]|0)+(i>>>16)|0,this.h[s]=65535&i;t[e+0]=this.h[0]>>>0&255,t[e+1]=this.h[0]>>>8&255,t[e+2]=this.h[1]>>>0&255,t[e+3]=this.h[1]>>>8&255,t[e+4]=this.h[2]>>>0&255,t[e+5]=this.h[2]>>>8&255,t[e+6]=this.h[3]>>>0&255,t[e+7]=this.h[3]>>>8&255,t[e+8]=this.h[4]>>>0&255,t[e+9]=this.h[4]>>>8&255,t[e+10]=this.h[5]>>>0&255,t[e+11]=this.h[5]>>>8&255,t[e+12]=this.h[6]>>>0&255,t[e+13]=this.h[6]>>>8&255,t[e+14]=this.h[7]>>>0&255,t[e+15]=this.h[7]>>>8&255},T.prototype.update=function(t,e,n){var r,i;if(this.leftover){for((i=16-this.leftover)>n&&(i=n),r=0;r=16&&(i=n-n%16,this.blocks(t,e,i),e+=i,n-=i),n){for(r=0;r=128;){for(S=0;S<16;S++)k=8*S+W,O[S]=n[k+0]<<24|n[k+1]<<16|n[k+2]<<8|n[k+3],L[S]=n[k+4]<<24|n[k+5]<<16|n[k+6]<<8|n[k+7];for(S=0;S<80;S++)if(i=U,s=R,o=M,a=I,h=N,c=D,u=j,z,d=H,p=B,f=F,g=q,b=Y,v=K,y=$,J,P=65535&(T=J),A=T>>>16,E=65535&(C=z),x=C>>>16,P+=65535&(T=(Y>>>14|N<<18)^(Y>>>18|N<<14)^(N>>>9|Y<<23)),A+=T>>>16,E+=65535&(C=(N>>>14|Y<<18)^(N>>>18|Y<<14)^(Y>>>9|N<<23)),x+=C>>>16,P+=65535&(T=Y&K^~Y&$),A+=T>>>16,E+=65535&(C=N&D^~N&j),x+=C>>>16,P+=65535&(T=X[2*S+1]),A+=T>>>16,E+=65535&(C=X[2*S]),x+=C>>>16,C=O[S%16],A+=(T=L[S%16])>>>16,E+=65535&C,x+=C>>>16,E+=(A+=(P+=65535&T)>>>16)>>>16,P=65535&(T=_=65535&P|A<<16),A=T>>>16,E=65535&(C=w=65535&E|(x+=E>>>16)<<16),x=C>>>16,P+=65535&(T=(H>>>28|U<<4)^(U>>>2|H<<30)^(U>>>7|H<<25)),A+=T>>>16,E+=65535&(C=(U>>>28|H<<4)^(H>>>2|U<<30)^(H>>>7|U<<25)),x+=C>>>16,A+=(T=H&B^H&F^B&F)>>>16,E+=65535&(C=U&R^U&M^R&M),x+=C>>>16,l=65535&(E+=(A+=(P+=65535&T)>>>16)>>>16)|(x+=E>>>16)<<16,m=65535&P|A<<16,P=65535&(T=g),A=T>>>16,E=65535&(C=a),x=C>>>16,A+=(T=_)>>>16,E+=65535&(C=w),x+=C>>>16,R=i,M=s,I=o,N=a=65535&(E+=(A+=(P+=65535&T)>>>16)>>>16)|(x+=E>>>16)<<16,D=h,j=c,z=u,U=l,B=d,F=p,q=f,Y=g=65535&P|A<<16,K=b,$=v,J=y,H=m,S%16==15)for(k=0;k<16;k++)C=O[k],P=65535&(T=L[k]),A=T>>>16,E=65535&C,x=C>>>16,C=O[(k+9)%16],P+=65535&(T=L[(k+9)%16]),A+=T>>>16,E+=65535&C,x+=C>>>16,w=O[(k+1)%16],P+=65535&(T=((_=L[(k+1)%16])>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25)),A+=T>>>16,E+=65535&(C=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7),x+=C>>>16,w=O[(k+14)%16],A+=(T=((_=L[(k+14)%16])>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26))>>>16,E+=65535&(C=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6),x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,O[k]=65535&E|x<<16,L[k]=65535&P|A<<16;P=65535&(T=H),A=T>>>16,E=65535&(C=U),x=C>>>16,C=t[0],A+=(T=e[0])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[0]=U=65535&E|x<<16,e[0]=H=65535&P|A<<16,P=65535&(T=B),A=T>>>16,E=65535&(C=R),x=C>>>16,C=t[1],A+=(T=e[1])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[1]=R=65535&E|x<<16,e[1]=B=65535&P|A<<16,P=65535&(T=F),A=T>>>16,E=65535&(C=M),x=C>>>16,C=t[2],A+=(T=e[2])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[2]=M=65535&E|x<<16,e[2]=F=65535&P|A<<16,P=65535&(T=q),A=T>>>16,E=65535&(C=I),x=C>>>16,C=t[3],A+=(T=e[3])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[3]=I=65535&E|x<<16,e[3]=q=65535&P|A<<16,P=65535&(T=Y),A=T>>>16,E=65535&(C=N),x=C>>>16,C=t[4],A+=(T=e[4])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[4]=N=65535&E|x<<16,e[4]=Y=65535&P|A<<16,P=65535&(T=K),A=T>>>16,E=65535&(C=D),x=C>>>16,C=t[5],A+=(T=e[5])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[5]=D=65535&E|x<<16,e[5]=K=65535&P|A<<16,P=65535&(T=$),A=T>>>16,E=65535&(C=j),x=C>>>16,C=t[6],A+=(T=e[6])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[6]=j=65535&E|x<<16,e[6]=$=65535&P|A<<16,P=65535&(T=J),A=T>>>16,E=65535&(C=z),x=C>>>16,C=t[7],A+=(T=e[7])>>>16,E+=65535&C,x+=C>>>16,x+=(E+=(A+=(P+=65535&T)>>>16)>>>16)>>>16,t[7]=z=65535&E|x<<16,e[7]=J=65535&P|A<<16,W+=128,r-=128}return r}function V(t,e,n){var r,i=new Int32Array(8),s=new Int32Array(8),o=new Uint8Array(256),a=n;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,G(i,s,e,n),n%=128,r=0;r=0;--i)Q(t,e,r=n[i/8|0]>>(7&i)&1),Z(e,t),Z(t,t),Q(t,e,r)}function nt(t,n){var r=[e(),e(),e(),e()];O(r[0],l),O(r[1],d),O(r[2],a),z(r[3],l,d),et(t,r,n)}function rt(t,n,i){var s,o=new Uint8Array(64),a=[e(),e(),e(),e()];for(i||r(n,32),V(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,nt(a,o),tt(t,a),s=0;s<32;s++)n[s+32]=t[s];return 0}var it=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function st(t,e){var n,r,i,s;for(r=63;r>=32;--r){for(n=0,i=r-32,s=r-12;i>4)*it[i],n=e[i]>>8,e[i]&=255;for(i=0;i<32;i++)e[i]-=n*it[i];for(r=0;r<32;r++)e[r+1]+=e[r]>>8,t[r]=255&e[r]}function ot(t){var e,n=new Float64Array(64);for(e=0;e<64;e++)n[e]=t[e];for(e=0;e<64;e++)t[e]=0;st(t,n)}function at(t,n,r,i){var s,o,a=new Uint8Array(64),h=new Uint8Array(64),c=new Uint8Array(64),u=new Float64Array(64),l=[e(),e(),e(),e()];V(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64;var d=r+64;for(s=0;s>7&&j(t[0],o,t[0]),z(t[3],t[0],t[1]),0)}(d,i))return-1;for(s=0;s=0},t.sign.keyPair=function(){var t=new Uint8Array(32),e=new Uint8Array(64);return rt(t,e),{publicKey:t,secretKey:e}},t.sign.keyPair.fromSecretKey=function(t){if(ut(t),64!==t.length)throw new Error("bad secret key size");for(var e=new Uint8Array(32),n=0;n>>6)+r(128|63&e):r(224|e>>>12&15)+r(128|e>>>6&63)+r(128|63&e)},c=function(t){return t.replace(/[^\x00-\x7F]/g,h)},u=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[i.charAt(n>>>18),i.charAt(n>>>12&63),e>=2?"=":i.charAt(n>>>6&63),e>=1?"=":i.charAt(63&n)].join("")},l=self.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,u)};var d=class{constructor(t,e,n,r){this.clear=e,this.timer=t(()=>{this.timer&&(this.timer=r(this.timer))},n)}isRunning(){return null!==this.timer}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}};function p(t){self.clearTimeout(t)}function f(t){self.clearInterval(t)}class g extends d{constructor(t,e){super(setTimeout,p,t,(function(t){return e(),null}))}}class b extends d{constructor(t,e){super(setInterval,f,t,(function(t){return e(),t}))}}var v={now:()=>Date.now?Date.now():(new Date).valueOf(),defer:t=>new g(0,t),method(t,...e){var n=Array.prototype.slice.call(arguments,1);return function(e){return e[t].apply(e,n.concat(arguments))}}};function y(t,...e){for(var n=0;ne!==t),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(t,e,n){for(var r=0;r0)for(r=0;r{self.console&&self.console.log&&self.console.log(t)}}debug(...t){this.log(this.globalLog,t)}warn(...t){this.log(this.globalLogWarn,t)}error(...t){this.log(this.globalLogError,t)}globalLogWarn(t){self.console&&self.console.warn?self.console.warn(t):this.globalLog(t)}globalLogError(t){self.console&&self.console.error?self.console.error(t):this.globalLogWarn(t)}log(t,...e){var n=m.apply(this,arguments);if(xe.log)xe.log(n);else if(xe.logToConsole){t.bind(this)(n)}}};class H extends j{constructor(t,e,n,r,i){super(),this.initialize=ae.transportConnectionInitializer,this.hooks=t,this.name=e,this.priority=n,this.key=r,this.options=i,this.state="new",this.timeline=i.timeline,this.activityTimeout=i.activityTimeout,this.id=this.timeline.generateUniqueID()}handlesActivityChecks(){return Boolean(this.hooks.handlesActivityChecks)}supportsPing(){return Boolean(this.hooks.supportsPing)}connect(){if(this.socket||"initialized"!==this.state)return!1;var t=this.hooks.urls.getInitial(this.key,this.options);try{this.socket=this.hooks.getSocket(t,this.options)}catch(t){return v.defer(()=>{this.onError(t),this.changeState("closed")}),!1}return this.bindListeners(),z.debug("Connecting",{transport:this.name,url:t}),this.changeState("connecting"),!0}close(){return!!this.socket&&(this.socket.close(),!0)}send(t){return"open"===this.state&&(v.defer(()=>{this.socket&&this.socket.send(t)}),!0)}ping(){"open"===this.state&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(t){this.emit("error",{type:"WebSocketError",error:t}),this.timeline.error(this.buildTimelineMessage({error:t.toString()}))}onClose(t){t?this.changeState("closed",{code:t.code,reason:t.reason,wasClean:t.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(t){this.emit("message",t)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=t=>{this.onError(t)},this.socket.onclose=t=>{this.onClose(t)},this.socket.onmessage=t=>{this.onMessage(t)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(t,e){this.state=t,this.timeline.info(this.buildTimelineMessage({state:t,params:e})),this.emit(t,e)}buildTimelineMessage(t){return y({cid:this.id},t)}}class B{constructor(t){this.hooks=t}isSupported(t){return this.hooks.isSupported(t)}createConnection(t,e,n,r){return new H(this.hooks,t,e,n,r)}}var F=new B({urls:M,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return Boolean(ae.getWebSocketAPI())},isSupported:function(){return Boolean(ae.getWebSocketAPI())},getSocket:function(t){return ae.createWebSocket(t)}}),q={urls:I,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},Y=y({getSocket:function(t){return ae.HTTPFactory.createStreamingSocket(t)}},q),K=y({getSocket:function(t){return ae.HTTPFactory.createPollingSocket(t)}},q),$={isSupported:function(){return ae.isXHRSupported()}},J={ws:F,xhr_streaming:new B(y({},Y,$)),xhr_polling:new B(y({},K,$))};class W{constructor(t,e,n){this.manager=t,this.transport=e,this.minPingDelay=n.minPingDelay,this.maxPingDelay=n.maxPingDelay,this.pingDelay=void 0}createConnection(t,e,n,r){r=y({},r,{activityTimeout:this.pingDelay});var i=this.transport.createConnection(t,e,n,r),s=null,o=function(){i.unbind("open",o),i.bind("closed",a),s=v.now()},a=t=>{if(i.unbind("closed",a),1002===t.code||1003===t.code)this.manager.reportDeath();else if(!t.wasClean&&s){var e=v.now()-s;e<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(e/2,this.minPingDelay))}};return i.bind("open",o),i}isSupported(t){return this.manager.isAlive()&&this.transport.isSupported(t)}}const X={decodeMessage:function(t){try{var e=JSON.parse(t.data),n=e.data;if("string"==typeof n)try{n=JSON.parse(e.data)}catch(t){}var r={event:e.event,channel:e.channel,data:n};return e.user_id&&(r.user_id=e.user_id),r}catch(e){throw{type:"MessageParseError",error:e,data:t.data}}},encodeMessage:function(t){return JSON.stringify(t)},processHandshake:function(t){var e=X.decodeMessage(t);if("pusher:connection_established"===e.event){if(!e.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:e.data.socket_id,activityTimeout:1e3*e.data.activity_timeout}}if("pusher:error"===e.event)return{action:this.getCloseAction(e.data),error:this.getCloseError(e.data)};throw"Invalid handshake"},getCloseAction:function(t){return t.code<4e3?t.code>=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}};var G=X;class V extends j{constructor(t,e){super(),this.id=t,this.transport=e,this.activityTimeout=e.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(t){return this.transport.send(t)}send_event(t,e,n){var r={event:t,data:e};return n&&(r.channel=n),z.debug("Event sent",r),this.send(G.encodeMessage(r))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var t={message:t=>{var e;try{e=G.decodeMessage(t)}catch(e){this.emit("error",{type:"MessageParseError",error:e,data:t.data})}if(void 0!==e){switch(z.debug("Event recd",e),e.event){case"pusher:error":this.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong")}this.emit("message",e)}},activity:()=>{this.emit("activity")},error:t=>{this.emit("error",t)},closed:t=>{e(),t&&t.code&&this.handleCloseEvent(t),this.transport=null,this.emit("closed")}},e=()=>{_(t,(t,e)=>{this.transport.unbind(e,t)})};_(t,(t,e)=>{this.transport.bind(e,t)})}handleCloseEvent(t){var e=G.getCloseAction(t),n=G.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})}}class Z{constructor(t,e){this.transport=t,this.callback=e,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=t=>{var e;this.unbindListeners();try{e=G.processHandshake(t)}catch(t){return this.finish("error",{error:t}),void this.transport.close()}"connected"===e.action?this.finish("connected",{connection:new V(e.id,this.transport),activityTimeout:e.activityTimeout}):(this.finish(e.action,{error:e.error}),this.transport.close())},this.onClosed=t=>{this.unbindListeners();var e=G.getCloseAction(t)||"backoff",n=G.getCloseError(t);this.finish(e,{error:n})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(t,e){this.callback(y({transport:this.transport,action:t},e))}}class Q{constructor(t,e){this.timeline=t,this.options=e||{}}send(t,e){this.timeline.isEmpty()||this.timeline.send(ae.TimelineTransport.getAgent(this,t),e)}}class tt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class et extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}Error;class nt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class rt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class it extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class st extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class ot extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class at extends Error{constructor(t,e){super(e),this.status=t,Object.setPrototypeOf(this,new.target.prototype)}}const ht={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}};var ct=function(t){const e=ht.urls[t];if(!e)return"";let n;return e.fullUrl?n=e.fullUrl:e.path&&(n=ht.baseUrl+e.path),n?"See: "+n:""};class ut extends j{constructor(t,e){super((function(e,n){z.debug("No callbacks on "+t+" for "+e)})),this.name=t,this.pusher=e,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(t,e){return e(null,{auth:""})}trigger(t,e){if(0!==t.indexOf("client-"))throw new tt("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=ct("triggeringClientEvents");z.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)}handleSubscriptionCountEvent(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(t,e)=>{t?(this.subscriptionPending=!1,z.error(t.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:t.message},t instanceof at?{status:t.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class lt extends ut{authorize(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)}}class dt{constructor(){this.reset()}get(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null}each(t){_(this.members,(e,n)=>{t(this.get(n))})}setMyID(t){this.myID=t}onSubscription(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)}addMember(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)}removeMember(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var pt=function(t,e,n,r){return new(n||(n=Promise))((function(i,s){function o(t){try{h(r.next(t))}catch(t){s(t)}}function a(t){try{h(r.throw(t))}catch(t){s(t)}}function h(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}h((r=r.apply(t,e||[])).next())}))};class ft extends lt{constructor(t,e){super(t,e),this.members=new dt}authorize(t,e){super.authorize(t,(t,n)=>pt(this,void 0,void 0,(function*(){if(!t)if(null!=(n=n).channel_data){var r=JSON.parse(n.channel_data);this.members.setMyID(r.user_id)}else{if(yield this.pusher.user.signinDonePromise,null==this.pusher.user.user_data){let t=ct("authorizationEndpoint");return z.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${t}, or the user should be signed in.`),void e("Invalid auth response")}this.members.setMyID(this.pusher.user.user_data.id)}e(t,n)})))}handleEvent(t){var e=t.event;if(0===e.indexOf("pusher_internal:"))this.handleInternalEvent(t);else{var n=t.data,r={};t.user_id&&(r.user_id=t.user_id),this.emit(e,n,r)}}handleInternalEvent(t){var e=t.event,n=t.data;switch(e){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(t);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(t);break;case"pusher_internal:member_added":var r=this.members.addMember(n);this.emit("pusher:member_added",r);break;case"pusher_internal:member_removed":var i=this.members.removeMember(n);i&&this.emit("pusher:member_removed",i)}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(t.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var gt=n(1),bt=n(0);class vt extends lt{constructor(t,e,n){super(t,e),this.key=null,this.nacl=n}authorize(t,e){super.authorize(t,(t,n)=>{if(t)return void e(t,n);let r=n.shared_secret;r?(this.key=Object(bt.decode)(r),delete n.shared_secret,e(null,n)):e(new Error("No shared_secret key in auth payload for encrypted channel: "+this.name),null)})}trigger(t,e){throw new it("Client events are not currently supported for encrypted channels")}handleEvent(t){var e=t.event,n=t.data;0!==e.indexOf("pusher_internal:")&&0!==e.indexOf("pusher:")?this.handleEncryptedEvent(e,n):super.handleEvent(t)}handleEncryptedEvent(t,e){if(!this.key)return void z.debug("Received encrypted event before key has been retrieved from the authEndpoint");if(!e.ciphertext||!e.nonce)return void z.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+e);let n=Object(bt.decode)(e.ciphertext);if(n.length{e?z.error(`Failed to make a request to the authEndpoint: ${s}. Unable to fetch new key, so dropping encrypted event`):(i=this.nacl.secretbox.open(n,r,this.key),null!==i?this.emit(t,this.getDataToEmit(i)):z.error("Failed to decrypt event with new key. Dropping encrypted event"))});this.emit(t,this.getDataToEmit(i))}getDataToEmit(t){let e=Object(gt.decode)(t);try{return JSON.parse(e)}catch(t){return e}}}class yt extends j{constructor(t,e){super(),this.state="initialized",this.connection=null,this.key=t,this.options=e,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var n=ae.getNetwork();n.bind("online",()=>{this.timeline.info({netinfo:"online"}),"connecting"!==this.state&&"unavailable"!==this.state||this.retryIn(0)}),n.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){this.connection||this.runner||(this.strategy.isSupported()?(this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()):this.updateState("failed"))}send(t){return!!this.connection&&this.connection.send(t)}send_event(t,e,n){return!!this.connection&&this.connection.send_event(t,e,n)}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var t=(e,n)=>{e?this.runner=this.strategy.connect(0,t):"error"===n.action?(this.emit("error",{type:"HandshakeError",error:n.error}),this.timeline.error({handshakeError:n.error})):(this.abortConnecting(),this.handshakeCallbacks[n.action](n))};this.runner=this.strategy.connect(0,t)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection)&&this.abandonConnection().close()}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(t){this.timeline.info({action:"retry",delay:t}),t>0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new g(t||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new g(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new g(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new g(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(t){return y({},t,{message:t=>{this.resetActivityCheck(),this.emit("message",t)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:t=>{this.emit("error",t)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(t){return y({},t,{connected:t=>{this.activityTimeout=Math.min(this.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(t.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let t=t=>e=>{e.error&&this.emit("error",{type:"WebSocketError",error:e.error}),t(e)};return{tls_only:t(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:t(()=>{this.disconnect()}),backoff:t(()=>{this.retryIn(1e3)}),retry:t(()=>{this.retryIn(0)})}}setConnection(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()}abandonConnection(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}}updateState(t,e){var n=this.state;if(this.state=t,n!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+e.socket_id),z.debug("State changed",n+" -> "+r),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}}shouldRetry(){return"connecting"===this.state||"connected"===this.state}}class mt{constructor(){this.channels={}}add(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return wt.createEncryptedChannel(t,e,e.config.nacl);let n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",r=ct("encryptedChannelSupport");throw new it(`${n}. ${r}`)}if(0===t.indexOf("private-"))return wt.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return wt.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new et('Cannot create a channel with name "'+t+'".');return wt.createChannel(t,e)}(t,e)),this.channels[t]}all(){return function(t){var e=[];return _(t,(function(t){e.push(t)})),e}(this.channels)}find(t){return this.channels[t]}remove(t){var e=this.channels[t];return delete this.channels[t],e}disconnect(){_(this.channels,(function(t){t.disconnect()}))}}var wt={createChannels:()=>new mt,createConnectionManager:(t,e)=>new yt(t,e),createChannel:(t,e)=>new ut(t,e),createPrivateChannel:(t,e)=>new lt(t,e),createPresenceChannel:(t,e)=>new ft(t,e),createEncryptedChannel:(t,e,n)=>new vt(t,e,n),createTimelineSender:(t,e)=>new Q(t,e),createHandshake:(t,e)=>new Z(t,e),createAssistantToTheTransportManager:(t,e,n)=>new W(t,e,n)};class _t{constructor(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}getAssistant(t){return wt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class St{constructor(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}isSupported(){return A(this.strategies,v.method("isSupported"))}connect(t,e){var n=this.strategies,r=0,i=this.timeout,s=null,o=(a,h)=>{h?e(null,h):(r+=1,this.loop&&(r%=n.length),r0&&(i=new g(n.timeout,(function(){s.abort(),r(!0)}))),s=t.connect(e,(function(t,e){t&&i&&i.isRunning()&&!n.failFast||(i&&i.ensureAborted(),r(t,e))})),{abort:function(){i&&i.ensureAborted(),s.abort()},forceMinPriority:function(t){s.forceMinPriority(t)}}}}class kt{constructor(t){this.strategies=t}isSupported(){return A(this.strategies,v.method("isSupported"))}connect(t,e){return function(t,e,n){var r=C(t,(function(t,r,i,s){return t.connect(e,n(r,s))}));return{abort:function(){k(r,Ct)},forceMinPriority:function(t){k(r,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(r,i){n[t].error=r,r?function(t){return function(t,e){for(var n=0;n=v.now()){var s=this.transports[r.transport];s&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),i.push(new St([s],{timeout:2*r.latency+1e3,failFast:!0})))}var o=v.now(),a=i.pop().connect(t,(function r(s,h){s?(At(n),i.length>0?(o=v.now(),a=i.pop().connect(t,r)):e(s)):(!function(t,e,n){var r=ae.getLocalStorage();if(r)try{r[Pt(t)]=O({timestamp:v.now(),transport:e,latency:n})}catch(t){}}(n,h.transport.name,v.now()-o),e(null,h))}));return{abort:function(){a.abort()},forceMinPriority:function(e){t=e,a&&a.forceMinPriority(e)}}}}function Pt(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function At(t){var e=ae.getLocalStorage();if(e)try{delete e[Pt(t)]}catch(t){}}class Et{constructor(t,{delay:e}){this.strategy=t,this.options={delay:e}}isSupported(){return this.strategy.isSupported()}connect(t,e){var n,r=this.strategy,i=new g(this.options.delay,(function(){n=r.connect(t,e)}));return{abort:function(){i.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}}}class xt{constructor(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}isSupported(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()}connect(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)}}class Ot{constructor(t){this.strategy=t}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.strategy.connect(t,(function(t,r){r&&n.abort(),e(t,r)}));return n}}function Lt(t){return function(){return t.isSupported()}}var Ut=function(t,e,n){var r={};function i(e,i,s,o,a){var h=n(t,e,i,s,o,a);return r[e]=h,h}var s,o=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=y({},o,{useTLS:!0}),h=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),c={loop:!0,timeout:15e3,timeoutLimit:6e4},u=new _t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=new _t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),d=i("ws","ws",3,o,u),p=i("wss","ws",3,a,u),f=i("xhr_streaming","xhr_streaming",1,h,l),g=i("xhr_polling","xhr_polling",1,h),b=new St([d],c),v=new St([p],c),m=new St([f],c),w=new St([g],c),_=new St([new xt(Lt(m),new kt([m,new Et(w,{delay:4e3})]),w)],c);return s=e.useTLS?new kt([b,new Et(_,{delay:2e3})]):new kt([b,new Et(v,{delay:2e3}),new Et(_,{delay:5e3})]),new Tt(new Ot(new xt(Lt(d),s,_)),r,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})};class Rt extends j{constructor(t,e,n){super(),this.hooks=t,this.method=e,this.url=n}start(t){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},ae.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)}close(){this.unloader&&(ae.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")}advanceBuffer(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null}isBufferTooLong(t){return this.position===t.length&&t.length>262144}}var Mt;!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(Mt||(Mt={}));var It=Mt,Nt=1;function Dt(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+Nt++}function jt(t){return ae.randomInt(t)}var zt=class{constructor(t,e){this.hooks=t,this.session=jt(1e3)+"/"+function(t){for(var e=[],n=0;n{this.onChunk(t)}),this.stream.bind("finished",t=>{this.hooks.onFinished(this,t)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(t){v.defer(()=>{this.onError(t),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}},Ht={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr_streaming"+t.queryString},onHeartbeat:function(t){t.sendRaw("[]")},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){t.onClose(1006,"Connection interrupted ("+e+")",!1)}},Bt={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr"+t.queryString},onHeartbeat:function(){},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){200===e?t.reconnect():t.onClose(1006,"Connection interrupted ("+e+")",!1)}},Ft={getRequest:function(t){var e=new(ae.getXHRAPI());return e.onreadystatechange=e.onprogress=function(){switch(e.readyState){case 3:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},qt={getDefaultStrategy:Ut,Transports:J,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket(t){return this.createSocket(Ht,t)},createPollingSocket(t){return this.createSocket(Bt,t)},createSocket:(t,e)=>new zt(t,e),createXHR(t,e){return this.createRequest(Ft,t,e)},createRequest:(t,e,n)=>new Rt(t,e,n)},setup(t){t.ready()},getLocalStorage(){},getClientFeatures:()=>S(P({ws:J.ws},(function(t){return t.isSupported({})}))),getProtocol:()=>"http:",isXHRSupported:()=>!0,createSocketRequest(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);throw"Cross-origin HTTP requests are not supported"},createXHR(){return new(this.getXHRAPI())},createWebSocket(t){return new(this.getWebSocketAPI())(t)},addUnloadListener(t){},removeUnloadListener(t){}};var Yt=new class extends j{isOnline(){return!0}},Kt=function(t,e,n,r,i){var s=new Headers;for(var o in s.set("Content-Type","application/x-www-form-urlencoded"),n.headers)s.set(o,n.headers[o]);if(null!=n.headersProvider){const t=n.headersProvider();for(var o in t)s.set(o,t[o])}var a=e,h=new Request(n.endpoint,{headers:s,body:a,credentials:"same-origin",method:"POST"});return fetch(h).then(t=>{let{status:e}=t;if(200===e)return t.text();throw new at(e,`Could not get ${r.toString()} info from your auth endpoint, status: ${e}`)}).then(t=>{let e;try{e=JSON.parse(t)}catch(e){throw new at(200,`JSON returned from ${r.toString()} endpoint was invalid, yet status code was 200. Data was: ${t}`)}i(null,e)}).catch(t=>{i(t,null)})},$t={name:"xhr",getAgent:function(t,e){return function(n,r){var i="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path,s=x(n);fetch(i+="/2?"+s).then(t=>{if(200!==t.status)throw`received ${t.status} from stats.pusher.com`;return t.json()}).then(({host:e})=>{e&&(t.host=e)}).catch(t=>{z.debug("TimelineSender Error: ",t)})}}};const{getDefaultStrategy:Jt,Transports:Wt,setup:Xt,getProtocol:Gt,isXHRSupported:Vt,getLocalStorage:Zt,createXHR:Qt,createWebSocket:te,addUnloadListener:ee,removeUnloadListener:ne,transportConnectionInitializer:re,createSocketRequest:ie,HTTPFactory:se}=qt;var oe,ae={getDefaultStrategy:Jt,Transports:Wt,setup:Xt,getProtocol:Gt,isXHRSupported:Vt,getLocalStorage:Zt,createXHR:Qt,createWebSocket:te,addUnloadListener:ee,removeUnloadListener:ne,transportConnectionInitializer:re,createSocketRequest:ie,HTTPFactory:se,TimelineTransport:$t,getAuthorizers:()=>({ajax:Kt}),getWebSocketAPI:()=>WebSocket,getXHRAPI:()=>XMLHttpRequest,getNetwork:()=>Yt,randomInt:t=>Math.floor((globalThis.crypto||globalThis.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(oe||(oe={}));var he=oe;class ce{constructor(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}log(t,e){t<=this.options.level&&(this.events.push(y({},e,{timestamp:v.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(t){this.log(he.ERROR,t)}info(t){this.log(he.INFO,t)}debug(t){this.log(he.DEBUG,t)}isEmpty(){return 0===this.events.length}send(t,e){var n=y({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(n,(t,n)=>{t||this.sent++,e&&e(t,n)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class ue{constructor(t,e,n,r){this.name=t,this.priority=e,this.transport=n,this.options=r||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(t,e){if(!this.isSupported())return le(new ot,e);if(this.priority{n||(c(),i?i.close():r.close())},forceMinPriority:t=>{n||this.priority{if(void 0===ae.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);ae.getAuthorizers()[t.transport](ae,r,t,pe.UserAuthentication,n)}};var ye=t=>{if(void 0===ae.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const r=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var r in n+="&channel_name="+encodeURIComponent(t.channelName),e.params)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e.params[r]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var r in t)n+="&"+encodeURIComponent(r)+"="+encodeURIComponent(t[r])}return n})(e,t);ae.getAuthorizers()[t.transport](ae,r,t,pe.ChannelAuthorization,n)}};function me(t){return t.httpHost?t.httpHost:t.cluster?`sockjs-${t.cluster}.pusher.com`:L.httpHost}function we(t){return t.wsHost?t.wsHost:`ws-${t.cluster}.pusher.com`}function _e(t){return"https:"===ae.getProtocol()||!1!==t.forceTLS}function Se(t){return"enableStats"in t?t.enableStats:"disableStats"in t&&!t.disableStats}function ke(t){const e=Object.assign(Object.assign({},L.userAuthentication),t.userAuthentication);return"customHandler"in e&&null!=e.customHandler?e.customHandler:ve(e)}function Ce(t,e){const n=function(t,e){let n;return"channelAuthorization"in t?n=Object.assign(Object.assign({},L.channelAuthorization),t.channelAuthorization):(n={transport:t.authTransport||L.authTransport,endpoint:t.authEndpoint||L.authEndpoint},"auth"in t&&("params"in t.auth&&(n.params=t.auth.params),"headers"in t.auth&&(n.headers=t.auth.headers)),"authorizer"in t&&(n.customHandler=((t,e,n)=>{const r={authTransport:e.transport,authEndpoint:e.endpoint,auth:{params:e.params,headers:e.headers}};return(e,i)=>{const s=t.channel(e.channelName);n(s,r).authorize(e.socketId,i)}})(e,n,t.authorizer))),n}(t,e);return"customHandler"in n&&null!=n.customHandler?n.customHandler:ye(n)}class Te extends j{constructor(t){super((function(t,e){z.debug("No callbacks on watchlist events for "+t)})),this.pusher=t,this.bindWatchlistInternalEvent()}handleEvent(t){t.data.events.forEach(t=>{this.emit(t.name,t)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",t=>{"pusher_internal:watchlist_events"===t.event&&this.handleEvent(t)})}}var Pe=function(){let t,e;return{promise:new Promise((n,r)=>{t=n,e=r}),resolve:t,reject:e}};class Ae extends j{constructor(t){super((function(t,e){z.debug("No callbacks on user for "+t)})),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(t,e)=>{if(t)return z.warn("Error during signin: "+t),void this._cleanup();this.pusher.send_event("pusher:signin",{auth:e.auth,user_data:e.user_data})},this.pusher=t,this.pusher.connection.bind("state_change",({previous:t,current:e})=>{"connected"!==t&&"connected"===e&&this._signin(),"connected"===t&&"connected"!==e&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new Te(t),this.pusher.connection.bind("message",t=>{"pusher:signin_success"===t.event&&this._onSigninSuccess(t.data),this.serverToUserChannel&&this.serverToUserChannel.name===t.channel&&this.serverToUserChannel.handleEvent(t)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),"connected"===this.pusher.connection.state&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(t){try{this.user_data=JSON.parse(t.user_data)}catch(e){return z.error("Failed parsing user data after signin: "+t.user_data),void this._cleanup()}if("string"!=typeof this.user_data.id||""===this.user_data.id)return z.error("user_data doesn't contain an id. user_data: "+this.user_data),void this._cleanup();this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){this.serverToUserChannel=new ut("#server-to-user-"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global((t,e)=>{0!==t.indexOf("pusher_internal:")&&0!==t.indexOf("pusher:")&&this.emit(t,e)}),(t=>{t.subscriptionPending&&t.subscriptionCancelled?t.reinstateSubscription():t.subscriptionPending||"connected"!==this.pusher.connection.state||t.subscribe()})(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested)return;if(this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:t,resolve:e,reject:n}=Pe();t.done=!1;const r=()=>{t.done=!0};t.then(r).catch(r),this.signinDonePromise=t,this._signinDoneResolve=e}}class Ee{static ready(){Ee.isReady=!0;for(var t=0,e=Ee.instances.length;tae.getDefaultStrategy(this.config,t,fe),timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:Boolean(this.config.useTLS)}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",t=>{var e=0===t.event.indexOf("pusher_internal:");if(t.channel){var n=this.channel(t.channel);n&&n.handleEvent(t)}e||this.global_emitter.emit(t.event,t.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",t=>{z.warn(t)}),Ee.instances.push(this),this.timeline.info({instances:Ee.instances.length}),this.user=new Ae(this),Ee.isReady&&this.connect()}channel(t){return this.channels.find(t)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),e=this.timelineSender;this.timelineSenderTimer=new b(6e4,(function(){e.send(t)}))}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(t,e,n){return this.global_emitter.bind(t,e,n),this}unbind(t,e,n){return this.global_emitter.unbind(t,e,n),this}bind_global(t){return this.global_emitter.bind_global(t),this}unbind_global(t){return this.global_emitter.unbind_global(t),this}unbind_all(t){return this.global_emitter.unbind_all(),this}subscribeAll(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)}subscribe(t){var e=this.channels.add(t,this);return e.subscriptionPending&&e.subscriptionCancelled?e.reinstateSubscription():e.subscriptionPending||"connected"!==this.connection.state||e.subscribe(),e}unsubscribe(t){var e=this.channels.find(t);e&&e.subscriptionPending?e.cancelSubscription():(e=this.channels.remove(t))&&e.subscribed&&e.unsubscribe()}send_event(t,e,n){return this.connection.send_event(t,e,n)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Ee.instances=[],Ee.isReady=!1,Ee.logToConsole=!1,Ee.Runtime=ae,Ee.ScriptReceivers=ae.ScriptReceivers,Ee.DependenciesReceivers=ae.DependenciesReceivers,Ee.auth_callbacks=ae.auth_callbacks;var xe=Ee;ae.setup(Ee);var Oe=n(2);class Le extends xe{constructor(t,e){xe.logToConsole=Le.logToConsole,xe.log=Le.log,be(e),e.nacl=Oe,super(t,e)}}}])})); //# sourceMappingURL=pusher-with-encryption.worker.min.js.map \ No newline at end of file diff --git a/dist/worker/pusher-with-encryption.worker.min.js.map b/dist/worker/pusher-with-encryption.worker.min.js.map index 5cb0f9f0f..b1247a678 100644 --- a/dist/worker/pusher-with-encryption.worker.min.js.map +++ b/dist/worker/pusher-with-encryption.worker.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","nacl","gf","init","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","vn","xi","y","yi","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","inp","k","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","Math","floor","sel25519","q","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","e","f","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","bytes","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","mask","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","crypto_hash","add","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","checkLengths","checkArrayTypes","arguments","TypeError","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","publicKey","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","fn","crypto","self","msCrypto","getRandomValues","default","b64chars","b64tab","charAt","cb_utob","cc","utob","replace","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","callback","timer","isRunning","ensureAborted","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","OneOffTimer","method","boundArguments","Array","slice","apply","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","keys","_","context","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","toString","buildQueryString","params","undefined","source","JSON","objects","paths","derez","path","nu","$ref","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","getGenericURL","baseScheme","useTLS","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","_callbacks","prefix","prefixedEventName","remove","names","removeCallback","removeAllCallbacks","binding","failThrough","callbacks","global_callbacks","eventName","bind_global","unbind","unbind_global","unbind_all","emit","metadata","args","globalLog","message","console","log","debug","warn","globalLogWarn","error","globalLogError","defaultLoggingFunction","logToConsole","hooks","priority","options","initialize","transportConnectionInitializer","state","timeline","id","generateUniqueID","handlesActivityChecks","supportsPing","connect","socket","url","urls","getSocket","onError","changeState","bindListeners","close","send","ping","onOpen","beforeOpen","getPath","onopen","type","buildTimelineMessage","onClose","closeEvent","code","reason","wasClean","unbindListeners","onMessage","onActivity","onerror","onclose","onmessage","onactivity","info","cid","isSupported","environment","createConnection","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","manager","minPingDelay","maxPingDelay","pingDelay","connection","openTimestamp","onClosed","reportDeath","lifespan","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","parse","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","isEmpty","TimelineTransport","getAgent","setPrototypeOf","status","urlStore","baseUrl","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","urlObj","urlPrefix","pusher","subscribed","subscriptionPending","subscriptionCancelled","authorize","socketId","auth","trigger","suffix","disconnect","handleEvent","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","subscribe","assign","HTTPAuthError","channel_data","cancelSubscription","reinstateSubscription","config","channelAuthorizer","channelName","reset","members","each","member","setMyID","myID","onSubscription","subscriptionData","presence","count","me","addMember","memberData","user_info","removeMember","authData","channelData","user","signinDonePromise","user_data","handleInternalEvent","addedMember","removedMember","sharedSecret","handleEncryptedEvent","ciphertext","cipherText","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","isUsingTLS","handshake","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","all","values","find","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","getAssistant","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","number","trueBranch","falseBranch","testSupportsStrategy","State","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","http_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","xhr_streaming_transport","xhr_polling_transport","ws_loop","wss_loop","streaming_loop","polling_loop","http_loop","start","payload","position","xhr","getRequest","unloader","addUnloadListener","setRequestHeader","removeUnloadListener","abortRequest","onChunk","chunk","advanceBuffer","isBufferTooLong","unreadData","endOfLinePosition","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","location","parts","exec","getLocation","readyState","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","reconnect","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","getXHRAPI","onreadystatechange","onprogress","responseText","getDefaultStrategy","Transports","createSocket","createXHR","createRequest","setup","PusherClass","ready","getClientFeatures","getProtocol","isOnline","query","authOptions","authRequestType","headers","Headers","headerName","headersProvider","dynamicHeaders","body","request","Request","credentials","fetch","then","response","text","parsedData","err","sender","host","json","getAuthorizers","ajax","WebSocket","XMLHttpRequest","globalThis","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","version","cluster","features","failAttempt","onInitialized","serializedTransport","AuthRequestType","transportClass","enabledTransports","disabledTransports","ignoreNullOrigin","deferred","validateOptions","paramsProvider","dynamicParams","composeChannelQuery","UserAuthentication","ChannelAuthorization","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","signin","userAuthenticator","_subscribeChannels","done","setDone","app_key","checkAppKey","statsHost","timelineParams","global_emitter","sessionID","Pusher","timelineSender","subscribeAll","internal","instances","isReady","allChannels","timelineSenderTimer","PeriodicTimer","event_name","channel_name","Runtime","ScriptReceivers","DependenciesReceivers","auth_callbacks","PusherWithEncryption"],"mappings":"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","file":"pusher-with-encryption.worker.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./node_modules/tweetnacl/nacl-fast.js","webpack://Pusher/./src/core/pusher-with-encryption.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/pusher-with-encryption.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","nacl","gf","init","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","vn","xi","y","yi","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","inp","k","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","Math","floor","sel25519","q","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","e","f","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","bytes","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","mask","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","crypto_hash","add","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","checkLengths","checkArrayTypes","arguments","TypeError","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","publicKey","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","fn","crypto","self","msCrypto","getRandomValues","default","b64chars","b64tab","charAt","cb_utob","cc","utob","replace","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","callback","timer","clearTimeout","clearInterval","super","setTimeout","setInterval","now","Date","valueOf","defer","args","boundArguments","Array","slice","apply","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","keys","_","context","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","toString","buildQueryString","params","undefined","method","source","JSON","objects","paths","derez","path","nu","$ref","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","getGenericURL","baseScheme","useTLS","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","_callbacks","prefix","prefixedEventName","names","removeCallback","removeAllCallbacks","binding","failThrough","callbacks","global_callbacks","eventName","remove","unbind","unbind_global","metadata","globalLog","message","console","log","globalLogWarn","globalLogError","warn","error","defaultLoggingFunction","logToConsole","hooks","priority","options","initialize","transportConnectionInitializer","state","timeline","id","generateUniqueID","handlesActivityChecks","supportsPing","socket","url","urls","getSocket","onError","changeState","bindListeners","debug","close","send","ping","beforeOpen","getPath","onopen","emit","type","buildTimelineMessage","closeEvent","code","reason","wasClean","unbindListeners","onOpen","onerror","onclose","onClose","onmessage","onMessage","onactivity","onActivity","info","cid","environment","isSupported","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","manager","minPingDelay","maxPingDelay","pingDelay","connection","createConnection","openTimestamp","onClosed","reportDeath","lifespan","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","parse","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","isEmpty","TimelineTransport","getAgent","BadEventName","setPrototypeOf","BadChannelName","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","status","urlStore","baseUrl","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","urlObj","pusher","subscribed","subscriptionPending","subscriptionCancelled","socketId","auth","suffix","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","authorize","assign","channel_data","config","channelAuthorizer","channelName","reset","members","member","myID","subscriptionData","presence","count","me","memberData","user_info","authData","channelData","setMyID","user","signinDonePromise","user_data","handleInternalEvent","addedMember","addMember","removedMember","removeMember","onSubscription","disconnect","sharedSecret","handleEncryptedEvent","handleEvent","ciphertext","cipherText","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","handshake","connect","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","ensureAborted","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","values","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","isRunning","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","number","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","http_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","xhr_streaming_transport","xhr_polling_transport","ws_loop","wss_loop","streaming_loop","polling_loop","http_loop","payload","position","xhr","getRequest","unloader","addUnloadListener","setRequestHeader","removeUnloadListener","abortRequest","chunk","advanceBuffer","isBufferTooLong","unreadData","endOfLinePosition","State","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","session","randomString","location","parts","exec","getLocation","readyState","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","start","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onChunk","onFinished","reconnect","unbind_all","getXHRAPI","onreadystatechange","onprogress","responseText","getDefaultStrategy","Transports","createSocket","createRequest","PusherClass","ready","getClientFeatures","getProtocol","createXHR","query","authOptions","authRequestType","headers","Headers","headerName","headersProvider","dynamicHeaders","body","request","Request","credentials","fetch","then","response","text","parsedData","catch","err","sender","host","json","setup","TimelineLevel","getAuthorizers","ajax","WebSocket","XMLHttpRequest","globalThis","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","version","cluster","features","failAttempt","onInitialized","serializedTransport","AuthRequestType","transportClass","enabledTransports","disabledTransports","ignoreNullOrigin","getAssistant","deferred","validateOptions","paramsProvider","dynamicParams","composeChannelQuery","UserAuthentication","ChannelAuthorization","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","userAuthenticator","_subscribeChannels","bind_global","reinstateSubscription","subscribe","ensure_subscribed","done","setDone","isReady","instances","app_key","checkAppKey","statsHost","timelineParams","getConfig","global_emitter","sessionID","timelineSender","subscribeAll","isUsingTLS","internal","find","all","timelineSenderTimer","event_name","channel_name","cancelSubscription","signin","Runtime","ScriptReceivers","DependenciesReceivers","auth_callbacks"],"mappings":"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","file":"pusher-with-encryption.worker.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","module.exports = require('./pusher-with-encryption').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import Pusher from './pusher';\nimport { Options, validateOptions } from './options';\nimport * as nacl from 'tweetnacl';\n\nexport default class PusherWithEncryption extends Pusher {\n constructor(app_key: string, options: Options) {\n Pusher.logToConsole = PusherWithEncryption.logToConsole;\n Pusher.log = PusherWithEncryption.log;\n\n validateOptions(options);\n options.nacl = nacl;\n super(app_key, options);\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/worker/pusher.worker.js b/dist/worker/pusher.worker.js index 1466d84c2..c5a1653c3 100644 --- a/dist/worker/pusher.worker.js +++ b/dist/worker/pusher.worker.js @@ -1,5 +1,5 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher @@ -603,43 +603,28 @@ var btoa = self.btoa || }; // CONCATENATED MODULE: ./src/core/utils/timers/abstract_timer.ts -var Timer = (function () { - function Timer(set, clear, delay, callback) { - var _this = this; +class Timer { + constructor(set, clear, delay, callback) { this.clear = clear; - this.timer = set(function () { - if (_this.timer) { - _this.timer = callback(_this.timer); + this.timer = set(() => { + if (this.timer) { + this.timer = callback(this.timer); } }, delay); } - Timer.prototype.isRunning = function () { + isRunning() { return this.timer !== null; - }; - Timer.prototype.ensureAborted = function () { + } + ensureAborted() { if (this.timer) { this.clear(this.timer); this.timer = null; } - }; - return Timer; -}()); + } +} /* harmony default export */ var abstract_timer = (Timer); // CONCATENATED MODULE: ./src/core/utils/timers/index.ts -var __extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); function timers_clearTimeout(timer) { self.clearTimeout(timer); @@ -647,33 +632,27 @@ function timers_clearTimeout(timer) { function timers_clearInterval(timer) { self.clearInterval(timer); } -var OneOffTimer = (function (_super) { - __extends(OneOffTimer, _super); - function OneOffTimer(delay, callback) { - return _super.call(this, setTimeout, timers_clearTimeout, delay, function (timer) { +class timers_OneOffTimer extends abstract_timer { + constructor(delay, callback) { + super(setTimeout, timers_clearTimeout, delay, function (timer) { callback(); return null; - }) || this; + }); } - return OneOffTimer; -}(abstract_timer)); - -var PeriodicTimer = (function (_super) { - __extends(PeriodicTimer, _super); - function PeriodicTimer(delay, callback) { - return _super.call(this, setInterval, timers_clearInterval, delay, function (timer) { +} +class timers_PeriodicTimer extends abstract_timer { + constructor(delay, callback) { + super(setInterval, timers_clearInterval, delay, function (timer) { callback(); return timer; - }) || this; + }); } - return PeriodicTimer; -}(abstract_timer)); - +} // CONCATENATED MODULE: ./src/core/util.ts var Util = { - now: function () { + now() { if (Date.now) { return Date.now(); } @@ -681,14 +660,10 @@ var Util = { return new Date().valueOf(); } }, - defer: function (callback) { - return new OneOffTimer(0, callback); + defer(callback) { + return new timers_OneOffTimer(0, callback); }, - method: function (name) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + method(name, ...args) { var boundArguments = Array.prototype.slice.call(arguments, 1); return function (object) { return object[name].apply(object, boundArguments.concat(arguments)); @@ -700,11 +675,7 @@ var Util = { // CONCATENATED MODULE: ./src/core/utils/collections.ts -function extend(target) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } +function extend(target, ...sources) { for (var i = 0; i < sources.length; i++) { var extensions = sources[i]; for (var property in extensions) { @@ -897,7 +868,7 @@ function safeJSONStringify(source) { // CONCATENATED MODULE: ./src/core/defaults.ts var Defaults = { - VERSION: "8.0.2", + VERSION: "8.1.0", PROTOCOL: 7, wsPort: 80, wssPort: 443, @@ -966,14 +937,14 @@ var sockjs = { // CONCATENATED MODULE: ./src/core/events/callback_registry.ts -var callback_registry_CallbackRegistry = (function () { - function CallbackRegistry() { +class callback_registry_CallbackRegistry { + constructor() { this._callbacks = {}; } - CallbackRegistry.prototype.get = function (name) { + get(name) { return this._callbacks[prefix(name)]; - }; - CallbackRegistry.prototype.add = function (name, callback, context) { + } + add(name, callback, context) { var prefixedEventName = prefix(name); this._callbacks[prefixedEventName] = this._callbacks[prefixedEventName] || []; @@ -981,8 +952,8 @@ var callback_registry_CallbackRegistry = (function () { fn: callback, context: context }); - }; - CallbackRegistry.prototype.remove = function (name, callback, context) { + } + remove(name, callback, context) { if (!name && !callback && !context) { this._callbacks = {}; return; @@ -994,8 +965,8 @@ var callback_registry_CallbackRegistry = (function () { else { this.removeAllCallbacks(names); } - }; - CallbackRegistry.prototype.removeCallback = function (names, callback, context) { + } + removeCallback(names, callback, context) { apply(names, function (name) { this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) { return ((callback && callback !== binding.fn) || @@ -1005,15 +976,13 @@ var callback_registry_CallbackRegistry = (function () { delete this._callbacks[name]; } }, this); - }; - CallbackRegistry.prototype.removeAllCallbacks = function (names) { + } + removeAllCallbacks(names) { apply(names, function (name) { delete this._callbacks[name]; }, this); - }; - return CallbackRegistry; -}()); -/* harmony default export */ var callback_registry = (callback_registry_CallbackRegistry); + } +} function prefix(name) { return '_' + name; } @@ -1021,38 +990,38 @@ function prefix(name) { // CONCATENATED MODULE: ./src/core/events/dispatcher.ts -var dispatcher_Dispatcher = (function () { - function Dispatcher(failThrough) { - this.callbacks = new callback_registry(); +class dispatcher_Dispatcher { + constructor(failThrough) { + this.callbacks = new callback_registry_CallbackRegistry(); this.global_callbacks = []; this.failThrough = failThrough; } - Dispatcher.prototype.bind = function (eventName, callback, context) { + bind(eventName, callback, context) { this.callbacks.add(eventName, callback, context); return this; - }; - Dispatcher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_callbacks.push(callback); return this; - }; - Dispatcher.prototype.unbind = function (eventName, callback, context) { + } + unbind(eventName, callback, context) { this.callbacks.remove(eventName, callback, context); return this; - }; - Dispatcher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { if (!callback) { this.global_callbacks = []; return this; } - this.global_callbacks = filter(this.global_callbacks || [], function (c) { return c !== callback; }); + this.global_callbacks = filter(this.global_callbacks || [], c => c !== callback); return this; - }; - Dispatcher.prototype.unbind_all = function () { + } + unbind_all() { this.unbind(); this.unbind_global(); return this; - }; - Dispatcher.prototype.emit = function (eventName, data, metadata) { + } + emit(eventName, data, metadata) { for (var i = 0; i < this.global_callbacks.length; i++) { this.global_callbacks[i](eventName, data); } @@ -1073,120 +1042,85 @@ var dispatcher_Dispatcher = (function () { this.failThrough(eventName, data); } return this; - }; - return Dispatcher; -}()); -/* harmony default export */ var dispatcher = (dispatcher_Dispatcher); + } +} // CONCATENATED MODULE: ./src/core/logger.ts -var logger_Logger = (function () { - function Logger() { - this.globalLog = function (message) { +class logger_Logger { + constructor() { + this.globalLog = (message) => { if (self.console && self.console.log) { self.console.log(message); } }; } - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + debug(...args) { this.log(this.globalLog, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + warn(...args) { this.log(this.globalLogWarn, args); - }; - Logger.prototype.error = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + } + error(...args) { this.log(this.globalLogError, args); - }; - Logger.prototype.globalLogWarn = function (message) { + } + globalLogWarn(message) { if (self.console && self.console.warn) { self.console.warn(message); } else { this.globalLog(message); } - }; - Logger.prototype.globalLogError = function (message) { + } + globalLogError(message) { if (self.console && self.console.error) { self.console.error(message); } else { this.globalLogWarn(message); } - }; - Logger.prototype.log = function (defaultLoggingFunction) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } + } + log(defaultLoggingFunction, ...args) { var message = stringify.apply(this, arguments); if (core_pusher.log) { core_pusher.log(message); } else if (core_pusher.logToConsole) { - var log = defaultLoggingFunction.bind(this); + const log = defaultLoggingFunction.bind(this); log(message); } - }; - return Logger; -}()); + } +} /* harmony default export */ var logger = (new logger_Logger()); // CONCATENATED MODULE: ./src/core/transports/transport_connection.ts -var transport_connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var transport_connection_TransportConnection = (function (_super) { - transport_connection_extends(TransportConnection, _super); - function TransportConnection(hooks, name, priority, key, options) { - var _this = _super.call(this) || this; - _this.initialize = worker_runtime.transportConnectionInitializer; - _this.hooks = hooks; - _this.name = name; - _this.priority = priority; - _this.key = key; - _this.options = options; - _this.state = 'new'; - _this.timeline = options.timeline; - _this.activityTimeout = options.activityTimeout; - _this.id = _this.timeline.generateUniqueID(); - return _this; +class transport_connection_TransportConnection extends dispatcher_Dispatcher { + constructor(hooks, name, priority, key, options) { + super(); + this.initialize = worker_runtime.transportConnectionInitializer; + this.hooks = hooks; + this.name = name; + this.priority = priority; + this.key = key; + this.options = options; + this.state = 'new'; + this.timeline = options.timeline; + this.activityTimeout = options.activityTimeout; + this.id = this.timeline.generateUniqueID(); } - TransportConnection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return Boolean(this.hooks.handlesActivityChecks); - }; - TransportConnection.prototype.supportsPing = function () { + } + supportsPing() { return Boolean(this.hooks.supportsPing); - }; - TransportConnection.prototype.connect = function () { - var _this = this; + } + connect() { if (this.socket || this.state !== 'initialized') { return false; } @@ -1195,18 +1129,18 @@ var transport_connection_TransportConnection = (function (_super) { this.socket = this.hooks.getSocket(url, this.options); } catch (e) { - util.defer(function () { - _this.onError(e); - _this.changeState('closed'); + util.defer(() => { + this.onError(e); + this.changeState('closed'); }); return false; } this.bindListeners(); - logger.debug('Connecting', { transport: this.name, url: url }); + logger.debug('Connecting', { transport: this.name, url }); this.changeState('connecting'); return true; - }; - TransportConnection.prototype.close = function () { + } + close() { if (this.socket) { this.socket.close(); return true; @@ -1214,13 +1148,12 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.send = function (data) { - var _this = this; + } + send(data) { if (this.state === 'open') { - util.defer(function () { - if (_this.socket) { - _this.socket.send(data); + util.defer(() => { + if (this.socket) { + this.socket.send(data); } }); return true; @@ -1228,24 +1161,24 @@ var transport_connection_TransportConnection = (function (_super) { else { return false; } - }; - TransportConnection.prototype.ping = function () { + } + ping() { if (this.state === 'open' && this.supportsPing()) { this.socket.ping(); } - }; - TransportConnection.prototype.onOpen = function () { + } + onOpen() { if (this.hooks.beforeOpen) { this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options)); } this.changeState('open'); this.socket.onopen = undefined; - }; - TransportConnection.prototype.onError = function (error) { + } + onError(error) { this.emit('error', { type: 'WebSocketError', error: error }); this.timeline.error(this.buildTimelineMessage({ error: error.toString() })); - }; - TransportConnection.prototype.onClose = function (closeEvent) { + } + onClose(closeEvent) { if (closeEvent) { this.changeState('closed', { code: closeEvent.code, @@ -1258,34 +1191,33 @@ var transport_connection_TransportConnection = (function (_super) { } this.unbindListeners(); this.socket = undefined; - }; - TransportConnection.prototype.onMessage = function (message) { + } + onMessage(message) { this.emit('message', message); - }; - TransportConnection.prototype.onActivity = function () { + } + onActivity() { this.emit('activity'); - }; - TransportConnection.prototype.bindListeners = function () { - var _this = this; - this.socket.onopen = function () { - _this.onOpen(); + } + bindListeners() { + this.socket.onopen = () => { + this.onOpen(); }; - this.socket.onerror = function (error) { - _this.onError(error); + this.socket.onerror = error => { + this.onError(error); }; - this.socket.onclose = function (closeEvent) { - _this.onClose(closeEvent); + this.socket.onclose = closeEvent => { + this.onClose(closeEvent); }; - this.socket.onmessage = function (message) { - _this.onMessage(message); + this.socket.onmessage = message => { + this.onMessage(message); }; if (this.supportsPing()) { - this.socket.onactivity = function () { - _this.onActivity(); + this.socket.onactivity = () => { + this.onActivity(); }; } - }; - TransportConnection.prototype.unbindListeners = function () { + } + unbindListeners() { if (this.socket) { this.socket.onopen = undefined; this.socket.onerror = undefined; @@ -1295,44 +1227,40 @@ var transport_connection_TransportConnection = (function (_super) { this.socket.onactivity = undefined; } } - }; - TransportConnection.prototype.changeState = function (state, params) { + } + changeState(state, params) { this.state = state; this.timeline.info(this.buildTimelineMessage({ state: state, params: params })); this.emit(state, params); - }; - TransportConnection.prototype.buildTimelineMessage = function (message) { + } + buildTimelineMessage(message) { return extend({ cid: this.id }, message); - }; - return TransportConnection; -}(dispatcher)); -/* harmony default export */ var transport_connection = (transport_connection_TransportConnection); + } +} // CONCATENATED MODULE: ./src/core/transports/transport.ts -var transport_Transport = (function () { - function Transport(hooks) { +class transport_Transport { + constructor(hooks) { this.hooks = hooks; } - Transport.prototype.isSupported = function (environment) { + isSupported(environment) { return this.hooks.isSupported(environment); - }; - Transport.prototype.createConnection = function (name, priority, key, options) { - return new transport_connection(this.hooks, name, priority, key, options); - }; - return Transport; -}()); -/* harmony default export */ var transports_transport = (transport_Transport); + } + createConnection(name, priority, key, options) { + return new transport_connection_TransportConnection(this.hooks, name, priority, key, options); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/transports/transports.ts -var WSTransport = new transports_transport({ +var WSTransport = new transport_Transport({ urls: ws, handlesActivityChecks: false, supportsPing: false, @@ -1369,8 +1297,8 @@ var xhrConfiguration = { return worker_runtime.isXHRSupported(); } }; -var XHRStreamingTransport = new transports_transport((extend({}, streamingConfiguration, xhrConfiguration))); -var XHRPollingTransport = new transports_transport(extend({}, pollingConfiguration, xhrConfiguration)); +var XHRStreamingTransport = new transport_Transport((extend({}, streamingConfiguration, xhrConfiguration))); +var XHRPollingTransport = new transport_Transport(extend({}, pollingConfiguration, xhrConfiguration)); var Transports = { ws: WSTransport, xhr_streaming: XHRStreamingTransport, @@ -1381,16 +1309,15 @@ var Transports = { // CONCATENATED MODULE: ./src/core/transports/assistant_to_the_transport_manager.ts -var assistant_to_the_transport_manager_AssistantToTheTransportManager = (function () { - function AssistantToTheTransportManager(manager, transport, options) { +class assistant_to_the_transport_manager_AssistantToTheTransportManager { + constructor(manager, transport, options) { this.manager = manager; this.transport = transport; this.minPingDelay = options.minPingDelay; this.maxPingDelay = options.maxPingDelay; this.pingDelay = undefined; } - AssistantToTheTransportManager.prototype.createConnection = function (name, priority, key, options) { - var _this = this; + createConnection(name, priority, key, options) { options = extend({}, options, { activityTimeout: this.pingDelay }); @@ -1401,31 +1328,29 @@ var assistant_to_the_transport_manager_AssistantToTheTransportManager = (functio connection.bind('closed', onClosed); openTimestamp = util.now(); }; - var onClosed = function (closeEvent) { + var onClosed = closeEvent => { connection.unbind('closed', onClosed); if (closeEvent.code === 1002 || closeEvent.code === 1003) { - _this.manager.reportDeath(); + this.manager.reportDeath(); } else if (!closeEvent.wasClean && openTimestamp) { var lifespan = util.now() - openTimestamp; - if (lifespan < 2 * _this.maxPingDelay) { - _this.manager.reportDeath(); - _this.pingDelay = Math.max(lifespan / 2, _this.minPingDelay); + if (lifespan < 2 * this.maxPingDelay) { + this.manager.reportDeath(); + this.pingDelay = Math.max(lifespan / 2, this.minPingDelay); } } }; connection.bind('open', onOpen); return connection; - }; - AssistantToTheTransportManager.prototype.isSupported = function (environment) { + } + isSupported(environment) { return this.manager.isAlive() && this.transport.isSupported(environment); - }; - return AssistantToTheTransportManager; -}()); -/* harmony default export */ var assistant_to_the_transport_manager = (assistant_to_the_transport_manager_AssistantToTheTransportManager); + } +} // CONCATENATED MODULE: ./src/core/connection/protocol/protocol.ts -var Protocol = { +const Protocol = { decodeMessage: function (messageEvent) { try { var messageData = JSON.parse(messageEvent.data); @@ -1518,68 +1443,52 @@ var Protocol = { /* harmony default export */ var protocol = (Protocol); // CONCATENATED MODULE: ./src/core/connection/connection.ts -var connection_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_Connection = (function (_super) { - connection_extends(Connection, _super); - function Connection(id, transport) { - var _this = _super.call(this) || this; - _this.id = id; - _this.transport = transport; - _this.activityTimeout = transport.activityTimeout; - _this.bindListeners(); - return _this; +class connection_Connection extends dispatcher_Dispatcher { + constructor(id, transport) { + super(); + this.id = id; + this.transport = transport; + this.activityTimeout = transport.activityTimeout; + this.bindListeners(); } - Connection.prototype.handlesActivityChecks = function () { + handlesActivityChecks() { return this.transport.handlesActivityChecks(); - }; - Connection.prototype.send = function (data) { + } + send(data) { return this.transport.send(data); - }; - Connection.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { var event = { event: name, data: data }; if (channel) { event.channel = channel; } logger.debug('Event sent', event); return this.send(protocol.encodeMessage(event)); - }; - Connection.prototype.ping = function () { + } + ping() { if (this.transport.supportsPing()) { this.transport.ping(); } else { this.send_event('pusher:ping', {}); } - }; - Connection.prototype.close = function () { + } + close() { this.transport.close(); - }; - Connection.prototype.bindListeners = function () { - var _this = this; + } + bindListeners() { var listeners = { - message: function (messageEvent) { + message: (messageEvent) => { var pusherEvent; try { pusherEvent = protocol.decodeMessage(messageEvent); } catch (e) { - _this.emit('error', { + this.emit('error', { type: 'MessageParseError', error: e, data: messageEvent.data @@ -1589,46 +1498,46 @@ var connection_Connection = (function (_super) { logger.debug('Event recd', pusherEvent); switch (pusherEvent.event) { case 'pusher:error': - _this.emit('error', { + this.emit('error', { type: 'PusherError', data: pusherEvent.data }); break; case 'pusher:ping': - _this.emit('ping'); + this.emit('ping'); break; case 'pusher:pong': - _this.emit('pong'); + this.emit('pong'); break; } - _this.emit('message', pusherEvent); + this.emit('message', pusherEvent); } }, - activity: function () { - _this.emit('activity'); + activity: () => { + this.emit('activity'); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function (closeEvent) { + closed: closeEvent => { unbindListeners(); if (closeEvent && closeEvent.code) { - _this.handleCloseEvent(closeEvent); + this.handleCloseEvent(closeEvent); } - _this.transport = null; - _this.emit('closed'); + this.transport = null; + this.emit('closed'); } }; - var unbindListeners = function () { - objectApply(listeners, function (listener, event) { - _this.transport.unbind(event, listener); + var unbindListeners = () => { + objectApply(listeners, (listener, event) => { + this.transport.unbind(event, listener); }); }; - objectApply(listeners, function (listener, event) { - _this.transport.bind(event, listener); + objectApply(listeners, (listener, event) => { + this.transport.bind(event, listener); }); - }; - Connection.prototype.handleCloseEvent = function (closeEvent) { + } + handleCloseEvent(closeEvent) { var action = protocol.getCloseAction(closeEvent); var error = protocol.getCloseError(closeEvent); if (error) { @@ -1637,203 +1546,138 @@ var connection_Connection = (function (_super) { if (action) { this.emit(action, { action: action, error: error }); } - }; - return Connection; -}(dispatcher)); -/* harmony default export */ var connection_connection = (connection_Connection); + } +} // CONCATENATED MODULE: ./src/core/connection/handshake/index.ts -var handshake_Handshake = (function () { - function Handshake(transport, callback) { +class handshake_Handshake { + constructor(transport, callback) { this.transport = transport; this.callback = callback; this.bindListeners(); } - Handshake.prototype.close = function () { + close() { this.unbindListeners(); this.transport.close(); - }; - Handshake.prototype.bindListeners = function () { - var _this = this; - this.onMessage = function (m) { - _this.unbindListeners(); + } + bindListeners() { + this.onMessage = m => { + this.unbindListeners(); var result; try { result = protocol.processHandshake(m); } catch (e) { - _this.finish('error', { error: e }); - _this.transport.close(); + this.finish('error', { error: e }); + this.transport.close(); return; } if (result.action === 'connected') { - _this.finish('connected', { - connection: new connection_connection(result.id, _this.transport), + this.finish('connected', { + connection: new connection_Connection(result.id, this.transport), activityTimeout: result.activityTimeout }); } else { - _this.finish(result.action, { error: result.error }); - _this.transport.close(); + this.finish(result.action, { error: result.error }); + this.transport.close(); } }; - this.onClosed = function (closeEvent) { - _this.unbindListeners(); + this.onClosed = closeEvent => { + this.unbindListeners(); var action = protocol.getCloseAction(closeEvent) || 'backoff'; var error = protocol.getCloseError(closeEvent); - _this.finish(action, { error: error }); + this.finish(action, { error: error }); }; this.transport.bind('message', this.onMessage); this.transport.bind('closed', this.onClosed); - }; - Handshake.prototype.unbindListeners = function () { + } + unbindListeners() { this.transport.unbind('message', this.onMessage); this.transport.unbind('closed', this.onClosed); - }; - Handshake.prototype.finish = function (action, params) { + } + finish(action, params) { this.callback(extend({ transport: this.transport, action: action }, params)); - }; - return Handshake; -}()); -/* harmony default export */ var connection_handshake = (handshake_Handshake); + } +} // CONCATENATED MODULE: ./src/core/timeline/timeline_sender.ts -var timeline_sender_TimelineSender = (function () { - function TimelineSender(timeline, options) { +class timeline_sender_TimelineSender { + constructor(timeline, options) { this.timeline = timeline; this.options = options || {}; } - TimelineSender.prototype.send = function (useTLS, callback) { + send(useTLS, callback) { if (this.timeline.isEmpty()) { return; } this.timeline.send(worker_runtime.TimelineTransport.getAgent(this, useTLS), callback); - }; - return TimelineSender; -}()); -/* harmony default export */ var timeline_sender = (timeline_sender_TimelineSender); + } +} // CONCATENATED MODULE: ./src/core/errors.ts -var errors_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var BadEventName = (function (_super) { - errors_extends(BadEventName, _super); - function BadEventName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadEventName; -}(Error)); - -var BadChannelName = (function (_super) { - errors_extends(BadChannelName, _super); - function BadChannelName(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return BadChannelName; -}(Error)); - -var RequestTimedOut = (function (_super) { - errors_extends(RequestTimedOut, _super); - function RequestTimedOut(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return RequestTimedOut; -}(Error)); - -var TransportPriorityTooLow = (function (_super) { - errors_extends(TransportPriorityTooLow, _super); - function TransportPriorityTooLow(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportPriorityTooLow; -}(Error)); - -var TransportClosed = (function (_super) { - errors_extends(TransportClosed, _super); - function TransportClosed(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return TransportClosed; -}(Error)); - -var UnsupportedFeature = (function (_super) { - errors_extends(UnsupportedFeature, _super); - function UnsupportedFeature(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedFeature; -}(Error)); - -var UnsupportedTransport = (function (_super) { - errors_extends(UnsupportedTransport, _super); - function UnsupportedTransport(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedTransport; -}(Error)); - -var UnsupportedStrategy = (function (_super) { - errors_extends(UnsupportedStrategy, _super); - function UnsupportedStrategy(msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return UnsupportedStrategy; -}(Error)); - -var HTTPAuthError = (function (_super) { - errors_extends(HTTPAuthError, _super); - function HTTPAuthError(status, msg) { - var _newTarget = this.constructor; - var _this = _super.call(this, msg) || this; - _this.status = status; - Object.setPrototypeOf(_this, _newTarget.prototype); - return _this; - } - return HTTPAuthError; -}(Error)); - +class BadEventName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class BadChannelName extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class RequestTimedOut extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportPriorityTooLow extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class TransportClosed extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedFeature extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedTransport extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class UnsupportedStrategy extends Error { + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, new.target.prototype); + } +} +class HTTPAuthError extends Error { + constructor(status, msg) { + super(msg); + this.status = status; + Object.setPrototypeOf(this, new.target.prototype); + } +} // CONCATENATED MODULE: ./src/core/utils/url_store.ts -var urlStore = { +const urlStore = { baseUrl: 'https://pusher.com', urls: { authenticationEndpoint: { @@ -1853,12 +1697,12 @@ var urlStore = { } } }; -var buildLogSuffix = function (key) { - var urlPrefix = 'See:'; - var urlObj = urlStore.urls[key]; +const buildLogSuffix = function (key) { + const urlPrefix = 'See:'; + const urlObj = urlStore.urls[key]; if (!urlObj) return ''; - var url; + let url; if (urlObj.fullUrl) { url = urlObj.fullUrl; } @@ -1867,60 +1711,45 @@ var buildLogSuffix = function (key) { } if (!url) return ''; - return urlPrefix + " " + url; + return `${urlPrefix} ${url}`; }; -/* harmony default export */ var url_store = ({ buildLogSuffix: buildLogSuffix }); +/* harmony default export */ var url_store = ({ buildLogSuffix }); // CONCATENATED MODULE: ./src/core/channels/channel.ts -var channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var channel_Channel = (function (_super) { - channel_extends(Channel, _super); - function Channel(name, pusher) { - var _this = _super.call(this, function (event, data) { +class channel_Channel extends dispatcher_Dispatcher { + constructor(name, pusher) { + super(function (event, data) { logger.debug('No callbacks on ' + name + ' for ' + event); - }) || this; - _this.name = name; - _this.pusher = pusher; - _this.subscribed = false; - _this.subscriptionPending = false; - _this.subscriptionCancelled = false; - return _this; - } - Channel.prototype.authorize = function (socketId, callback) { + }); + this.name = name; + this.pusher = pusher; + this.subscribed = false; + this.subscriptionPending = false; + this.subscriptionCancelled = false; + } + authorize(socketId, callback) { return callback(null, { auth: '' }); - }; - Channel.prototype.trigger = function (event, data) { + } + trigger(event, data) { if (event.indexOf('client-') !== 0) { throw new BadEventName("Event '" + event + "' does not start with 'client-'"); } if (!this.subscribed) { var suffix = url_store.buildLogSuffix('triggeringClientEvents'); - logger.warn("Client event triggered before channel 'subscription_succeeded' event . " + suffix); + logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`); } return this.pusher.send_event(event, data, this.name); - }; - Channel.prototype.disconnect = function () { + } + disconnect() { this.subscribed = false; this.subscriptionPending = false; - }; - Channel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName === 'pusher_internal:subscription_succeeded') { @@ -1933,8 +1762,8 @@ var channel_Channel = (function (_super) { var metadata = {}; this.emit(eventName, data, metadata); } - }; - Channel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -1943,91 +1772,69 @@ var channel_Channel = (function (_super) { else { this.emit('pusher:subscription_succeeded', event.data); } - }; - Channel.prototype.handleSubscriptionCountEvent = function (event) { + } + handleSubscriptionCountEvent(event) { if (event.data.subscription_count) { this.subscriptionCount = event.data.subscription_count; } this.emit('pusher:subscription_count', event.data); - }; - Channel.prototype.subscribe = function () { - var _this = this; + } + subscribe() { if (this.subscribed) { return; } this.subscriptionPending = true; this.subscriptionCancelled = false; - this.authorize(this.pusher.connection.socket_id, function (error, data) { + this.authorize(this.pusher.connection.socket_id, (error, data) => { if (error) { - _this.subscriptionPending = false; + this.subscriptionPending = false; logger.error(error.toString()); - _this.emit('pusher:subscription_error', Object.assign({}, { + this.emit('pusher:subscription_error', Object.assign({}, { type: 'AuthError', error: error.message }, error instanceof HTTPAuthError ? { status: error.status } : {})); } else { - _this.pusher.send_event('pusher:subscribe', { + this.pusher.send_event('pusher:subscribe', { auth: data.auth, channel_data: data.channel_data, - channel: _this.name + channel: this.name }); } }); - }; - Channel.prototype.unsubscribe = function () { + } + unsubscribe() { this.subscribed = false; this.pusher.send_event('pusher:unsubscribe', { channel: this.name }); - }; - Channel.prototype.cancelSubscription = function () { + } + cancelSubscription() { this.subscriptionCancelled = true; - }; - Channel.prototype.reinstateSubscription = function () { + } + reinstateSubscription() { this.subscriptionCancelled = false; - }; - return Channel; -}(dispatcher)); -/* harmony default export */ var channels_channel = (channel_Channel); + } +} // CONCATENATED MODULE: ./src/core/channels/private_channel.ts -var private_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var PrivateChannel = (function (_super) { - private_channel_extends(PrivateChannel, _super); - function PrivateChannel() { - return _super !== null && _super.apply(this, arguments) || this; - } - PrivateChannel.prototype.authorize = function (socketId, callback) { +class private_channel_PrivateChannel extends channel_Channel { + authorize(socketId, callback) { return this.pusher.config.channelAuthorizer({ channelName: this.name, socketId: socketId }, callback); - }; - return PrivateChannel; -}(channels_channel)); -/* harmony default export */ var private_channel = (PrivateChannel); + } +} // CONCATENATED MODULE: ./src/core/channels/members.ts -var members_Members = (function () { - function Members() { +class members_Members { + constructor() { this.reset(); } - Members.prototype.get = function (id) { + get(id) { if (Object.prototype.hasOwnProperty.call(this.members, id)) { return { id: id, @@ -2037,60 +1844,44 @@ var members_Members = (function () { else { return null; } - }; - Members.prototype.each = function (callback) { - var _this = this; - objectApply(this.members, function (member, id) { - callback(_this.get(id)); + } + each(callback) { + objectApply(this.members, (member, id) => { + callback(this.get(id)); }); - }; - Members.prototype.setMyID = function (id) { + } + setMyID(id) { this.myID = id; - }; - Members.prototype.onSubscription = function (subscriptionData) { + } + onSubscription(subscriptionData) { this.members = subscriptionData.presence.hash; this.count = subscriptionData.presence.count; this.me = this.get(this.myID); - }; - Members.prototype.addMember = function (memberData) { + } + addMember(memberData) { if (this.get(memberData.user_id) === null) { this.count++; } this.members[memberData.user_id] = memberData.user_info; return this.get(memberData.user_id); - }; - Members.prototype.removeMember = function (memberData) { + } + removeMember(memberData) { var member = this.get(memberData.user_id); if (member) { delete this.members[memberData.user_id]; this.count--; } return member; - }; - Members.prototype.reset = function () { + } + reset() { this.members = {}; this.count = 0; this.myID = null; this.me = null; - }; - return Members; -}()); -/* harmony default export */ var members = (members_Members); + } +} // CONCATENATED MODULE: ./src/core/channels/presence_channel.ts -var presence_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -2100,80 +1891,42 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = (undefined && undefined.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var presence_channel_PresenceChannel = (function (_super) { - presence_channel_extends(PresenceChannel, _super); - function PresenceChannel(name, pusher) { - var _this = _super.call(this, name, pusher) || this; - _this.members = new members(); - return _this; - } - PresenceChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { return __awaiter(_this, void 0, void 0, function () { - var channelData, suffix; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!!error) return [3, 3]; - authData = authData; - if (!(authData.channel_data != null)) return [3, 1]; - channelData = JSON.parse(authData.channel_data); - this.members.setMyID(channelData.user_id); - return [3, 3]; - case 1: return [4, this.pusher.user.signinDonePromise]; - case 2: - _a.sent(); - if (this.pusher.user.user_data != null) { - this.members.setMyID(this.pusher.user.user_data.id); - } - else { - suffix = url_store.buildLogSuffix('authorizationEndpoint'); - logger.error("Invalid auth response for channel '" + this.name + "', " + - ("expected 'channel_data' field. " + suffix + ", ") + - "or the user should be signed in."); - callback('Invalid auth response'); - return [2]; - } - _a.label = 3; - case 3: - callback(error, authData); - return [2]; +class presence_channel_PresenceChannel extends private_channel_PrivateChannel { + constructor(name, pusher) { + super(name, pusher); + this.members = new members_Members(); + } + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () { + if (!error) { + authData = authData; + if (authData.channel_data != null) { + var channelData = JSON.parse(authData.channel_data); + this.members.setMyID(channelData.user_id); } - }); - }); }); - }; - PresenceChannel.prototype.handleEvent = function (event) { + else { + yield this.pusher.user.signinDonePromise; + if (this.pusher.user.user_data != null) { + this.members.setMyID(this.pusher.user.user_data.id); + } + else { + let suffix = url_store.buildLogSuffix('authorizationEndpoint'); + logger.error(`Invalid auth response for channel '${this.name}', ` + + `expected 'channel_data' field. ${suffix}, ` + + `or the user should be signed in.`); + callback('Invalid auth response'); + return; + } + } + } + callback(error, authData); + })); + } + handleEvent(event) { var eventName = event.event; if (eventName.indexOf('pusher_internal:') === 0) { this.handleInternalEvent(event); @@ -2186,8 +1939,8 @@ var presence_channel_PresenceChannel = (function (_super) { } this.emit(eventName, data, metadata); } - }; - PresenceChannel.prototype.handleInternalEvent = function (event) { + } + handleInternalEvent(event) { var eventName = event.event; var data = event.data; switch (eventName) { @@ -2208,8 +1961,8 @@ var presence_channel_PresenceChannel = (function (_super) { } break; } - }; - PresenceChannel.prototype.handleSubscriptionSucceededEvent = function (event) { + } + handleSubscriptionSucceededEvent(event) { this.subscriptionPending = false; this.subscribed = true; if (this.subscriptionCancelled) { @@ -2219,14 +1972,12 @@ var presence_channel_PresenceChannel = (function (_super) { this.members.onSubscription(event.data); this.emit('pusher:subscription_succeeded', this.members); } - }; - PresenceChannel.prototype.disconnect = function () { + } + disconnect() { this.members.reset(); - _super.prototype.disconnect.call(this); - }; - return PresenceChannel; -}(private_channel)); -/* harmony default export */ var presence_channel = (presence_channel_PresenceChannel); + super.disconnect(); + } +} // EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js var utf8 = __webpack_require__(1); @@ -2235,64 +1986,47 @@ var utf8 = __webpack_require__(1); var base64 = __webpack_require__(0); // CONCATENATED MODULE: ./src/core/channels/encrypted_channel.ts -var encrypted_channel_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var encrypted_channel_EncryptedChannel = (function (_super) { - encrypted_channel_extends(EncryptedChannel, _super); - function EncryptedChannel(name, pusher, nacl) { - var _this = _super.call(this, name, pusher) || this; - _this.key = null; - _this.nacl = nacl; - return _this; +class encrypted_channel_EncryptedChannel extends private_channel_PrivateChannel { + constructor(name, pusher, nacl) { + super(name, pusher); + this.key = null; + this.nacl = nacl; } - EncryptedChannel.prototype.authorize = function (socketId, callback) { - var _this = this; - _super.prototype.authorize.call(this, socketId, function (error, authData) { + authorize(socketId, callback) { + super.authorize(socketId, (error, authData) => { if (error) { callback(error, authData); return; } - var sharedSecret = authData['shared_secret']; + let sharedSecret = authData['shared_secret']; if (!sharedSecret) { - callback(new Error("No shared_secret key in auth payload for encrypted channel: " + _this.name), null); + callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null); return; } - _this.key = Object(base64["decode"])(sharedSecret); + this.key = Object(base64["decode"])(sharedSecret); delete authData['shared_secret']; callback(null, authData); }); - }; - EncryptedChannel.prototype.trigger = function (event, data) { + } + trigger(event, data) { throw new UnsupportedFeature('Client events are not currently supported for encrypted channels'); - }; - EncryptedChannel.prototype.handleEvent = function (event) { + } + handleEvent(event) { var eventName = event.event; var data = event.data; if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { - _super.prototype.handleEvent.call(this, event); + super.handleEvent(event); return; } this.handleEncryptedEvent(eventName, data); - }; - EncryptedChannel.prototype.handleEncryptedEvent = function (event, data) { - var _this = this; + } + handleEncryptedEvent(event, data) { if (!this.key) { logger.debug('Received encrypted event before key has been retrieved from the authEndpoint'); return; @@ -2302,98 +2036,81 @@ var encrypted_channel_EncryptedChannel = (function (_super) { data); return; } - var cipherText = Object(base64["decode"])(data.ciphertext); + let cipherText = Object(base64["decode"])(data.ciphertext); if (cipherText.length < this.nacl.secretbox.overheadLength) { - logger.error("Expected encrypted event ciphertext length to be " + this.nacl.secretbox.overheadLength + ", got: " + cipherText.length); + logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`); return; } - var nonce = Object(base64["decode"])(data.nonce); + let nonce = Object(base64["decode"])(data.nonce); if (nonce.length < this.nacl.secretbox.nonceLength) { - logger.error("Expected encrypted event nonce length to be " + this.nacl.secretbox.nonceLength + ", got: " + nonce.length); + logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`); return; } - var bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); + let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'); - this.authorize(this.pusher.connection.socket_id, function (error, authData) { + this.authorize(this.pusher.connection.socket_id, (error, authData) => { if (error) { - logger.error("Failed to make a request to the authEndpoint: " + authData + ". Unable to fetch new key, so dropping encrypted event"); + logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`); return; } - bytes = _this.nacl.secretbox.open(cipherText, nonce, _this.key); + bytes = this.nacl.secretbox.open(cipherText, nonce, this.key); if (bytes === null) { - logger.error("Failed to decrypt event with new key. Dropping encrypted event"); + logger.error(`Failed to decrypt event with new key. Dropping encrypted event`); return; } - _this.emit(event, _this.getDataToEmit(bytes)); + this.emit(event, this.getDataToEmit(bytes)); return; }); return; } this.emit(event, this.getDataToEmit(bytes)); - }; - EncryptedChannel.prototype.getDataToEmit = function (bytes) { - var raw = Object(utf8["decode"])(bytes); + } + getDataToEmit(bytes) { + let raw = Object(utf8["decode"])(bytes); try { return JSON.parse(raw); } catch (_a) { return raw; } - }; - return EncryptedChannel; -}(private_channel)); -/* harmony default export */ var encrypted_channel = (encrypted_channel_EncryptedChannel); + } +} // CONCATENATED MODULE: ./src/core/connection/connection_manager.ts -var connection_manager_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var connection_manager_ConnectionManager = (function (_super) { - connection_manager_extends(ConnectionManager, _super); - function ConnectionManager(key, options) { - var _this = _super.call(this) || this; - _this.state = 'initialized'; - _this.connection = null; - _this.key = key; - _this.options = options; - _this.timeline = _this.options.timeline; - _this.usingTLS = _this.options.useTLS; - _this.errorCallbacks = _this.buildErrorCallbacks(); - _this.connectionCallbacks = _this.buildConnectionCallbacks(_this.errorCallbacks); - _this.handshakeCallbacks = _this.buildHandshakeCallbacks(_this.errorCallbacks); +class connection_manager_ConnectionManager extends dispatcher_Dispatcher { + constructor(key, options) { + super(); + this.state = 'initialized'; + this.connection = null; + this.key = key; + this.options = options; + this.timeline = this.options.timeline; + this.usingTLS = this.options.useTLS; + this.errorCallbacks = this.buildErrorCallbacks(); + this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks); + this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks); var Network = worker_runtime.getNetwork(); - Network.bind('online', function () { - _this.timeline.info({ netinfo: 'online' }); - if (_this.state === 'connecting' || _this.state === 'unavailable') { - _this.retryIn(0); + Network.bind('online', () => { + this.timeline.info({ netinfo: 'online' }); + if (this.state === 'connecting' || this.state === 'unavailable') { + this.retryIn(0); } }); - Network.bind('offline', function () { - _this.timeline.info({ netinfo: 'offline' }); - if (_this.connection) { - _this.sendActivityCheck(); + Network.bind('offline', () => { + this.timeline.info({ netinfo: 'offline' }); + if (this.connection) { + this.sendActivityCheck(); } }); - _this.updateStrategy(); - return _this; + this.updateStrategy(); } - ConnectionManager.prototype.connect = function () { + connect() { if (this.connection || this.runner) { return; } @@ -2404,59 +2121,58 @@ var connection_manager_ConnectionManager = (function (_super) { this.updateState('connecting'); this.startConnecting(); this.setUnavailableTimer(); - }; - ConnectionManager.prototype.send = function (data) { + } + send(data) { if (this.connection) { return this.connection.send(data); } else { return false; } - }; - ConnectionManager.prototype.send_event = function (name, data, channel) { + } + send_event(name, data, channel) { if (this.connection) { return this.connection.send_event(name, data, channel); } else { return false; } - }; - ConnectionManager.prototype.disconnect = function () { + } + disconnect() { this.disconnectInternally(); this.updateState('disconnected'); - }; - ConnectionManager.prototype.isUsingTLS = function () { + } + isUsingTLS() { return this.usingTLS; - }; - ConnectionManager.prototype.startConnecting = function () { - var _this = this; - var callback = function (error, handshake) { + } + startConnecting() { + var callback = (error, handshake) => { if (error) { - _this.runner = _this.strategy.connect(0, callback); + this.runner = this.strategy.connect(0, callback); } else { if (handshake.action === 'error') { - _this.emit('error', { + this.emit('error', { type: 'HandshakeError', error: handshake.error }); - _this.timeline.error({ handshakeError: handshake.error }); + this.timeline.error({ handshakeError: handshake.error }); } else { - _this.abortConnecting(); - _this.handshakeCallbacks[handshake.action](handshake); + this.abortConnecting(); + this.handshakeCallbacks[handshake.action](handshake); } } }; this.runner = this.strategy.connect(0, callback); - }; - ConnectionManager.prototype.abortConnecting = function () { + } + abortConnecting() { if (this.runner) { this.runner.abort(); this.runner = null; } - }; - ConnectionManager.prototype.disconnectInternally = function () { + } + disconnectInternally() { this.abortConnecting(); this.clearRetryTimer(); this.clearUnavailableTimer(); @@ -2464,136 +2180,129 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.abandonConnection(); connection.close(); } - }; - ConnectionManager.prototype.updateStrategy = function () { + } + updateStrategy() { this.strategy = this.options.getStrategy({ key: this.key, timeline: this.timeline, useTLS: this.usingTLS }); - }; - ConnectionManager.prototype.retryIn = function (delay) { - var _this = this; + } + retryIn(delay) { this.timeline.info({ action: 'retry', delay: delay }); if (delay > 0) { this.emit('connecting_in', Math.round(delay / 1000)); } - this.retryTimer = new OneOffTimer(delay || 0, function () { - _this.disconnectInternally(); - _this.connect(); + this.retryTimer = new timers_OneOffTimer(delay || 0, () => { + this.disconnectInternally(); + this.connect(); }); - }; - ConnectionManager.prototype.clearRetryTimer = function () { + } + clearRetryTimer() { if (this.retryTimer) { this.retryTimer.ensureAborted(); this.retryTimer = null; } - }; - ConnectionManager.prototype.setUnavailableTimer = function () { - var _this = this; - this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, function () { - _this.updateState('unavailable'); + } + setUnavailableTimer() { + this.unavailableTimer = new timers_OneOffTimer(this.options.unavailableTimeout, () => { + this.updateState('unavailable'); }); - }; - ConnectionManager.prototype.clearUnavailableTimer = function () { + } + clearUnavailableTimer() { if (this.unavailableTimer) { this.unavailableTimer.ensureAborted(); } - }; - ConnectionManager.prototype.sendActivityCheck = function () { - var _this = this; + } + sendActivityCheck() { this.stopActivityCheck(); this.connection.ping(); - this.activityTimer = new OneOffTimer(this.options.pongTimeout, function () { - _this.timeline.error({ pong_timed_out: _this.options.pongTimeout }); - _this.retryIn(0); + this.activityTimer = new timers_OneOffTimer(this.options.pongTimeout, () => { + this.timeline.error({ pong_timed_out: this.options.pongTimeout }); + this.retryIn(0); }); - }; - ConnectionManager.prototype.resetActivityCheck = function () { - var _this = this; + } + resetActivityCheck() { this.stopActivityCheck(); if (this.connection && !this.connection.handlesActivityChecks()) { - this.activityTimer = new OneOffTimer(this.activityTimeout, function () { - _this.sendActivityCheck(); + this.activityTimer = new timers_OneOffTimer(this.activityTimeout, () => { + this.sendActivityCheck(); }); } - }; - ConnectionManager.prototype.stopActivityCheck = function () { + } + stopActivityCheck() { if (this.activityTimer) { this.activityTimer.ensureAborted(); } - }; - ConnectionManager.prototype.buildConnectionCallbacks = function (errorCallbacks) { - var _this = this; + } + buildConnectionCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - message: function (message) { - _this.resetActivityCheck(); - _this.emit('message', message); + message: message => { + this.resetActivityCheck(); + this.emit('message', message); }, - ping: function () { - _this.send_event('pusher:pong', {}); + ping: () => { + this.send_event('pusher:pong', {}); }, - activity: function () { - _this.resetActivityCheck(); + activity: () => { + this.resetActivityCheck(); }, - error: function (error) { - _this.emit('error', error); + error: error => { + this.emit('error', error); }, - closed: function () { - _this.abandonConnection(); - if (_this.shouldRetry()) { - _this.retryIn(1000); + closed: () => { + this.abandonConnection(); + if (this.shouldRetry()) { + this.retryIn(1000); } } }); - }; - ConnectionManager.prototype.buildHandshakeCallbacks = function (errorCallbacks) { - var _this = this; + } + buildHandshakeCallbacks(errorCallbacks) { return extend({}, errorCallbacks, { - connected: function (handshake) { - _this.activityTimeout = Math.min(_this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); - _this.clearUnavailableTimer(); - _this.setConnection(handshake.connection); - _this.socket_id = _this.connection.id; - _this.updateState('connected', { socket_id: _this.socket_id }); + connected: (handshake) => { + this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity); + this.clearUnavailableTimer(); + this.setConnection(handshake.connection); + this.socket_id = this.connection.id; + this.updateState('connected', { socket_id: this.socket_id }); } }); - }; - ConnectionManager.prototype.buildErrorCallbacks = function () { - var _this = this; - var withErrorEmitted = function (callback) { - return function (result) { + } + buildErrorCallbacks() { + let withErrorEmitted = callback => { + return (result) => { if (result.error) { - _this.emit('error', { type: 'WebSocketError', error: result.error }); + this.emit('error', { type: 'WebSocketError', error: result.error }); } callback(result); }; }; return { - tls_only: withErrorEmitted(function () { - _this.usingTLS = true; - _this.updateStrategy(); - _this.retryIn(0); + tls_only: withErrorEmitted(() => { + this.usingTLS = true; + this.updateStrategy(); + this.retryIn(0); }), - refused: withErrorEmitted(function () { - _this.disconnect(); + refused: withErrorEmitted(() => { + this.disconnect(); }), - backoff: withErrorEmitted(function () { - _this.retryIn(1000); + backoff: withErrorEmitted(() => { + this.retryIn(1000); }), - retry: withErrorEmitted(function () { - _this.retryIn(0); + retry: withErrorEmitted(() => { + this.retryIn(0); }) }; - }; - ConnectionManager.prototype.setConnection = function (connection) { + } + setConnection(connection) { this.connection = connection; for (var event in this.connectionCallbacks) { this.connection.bind(event, this.connectionCallbacks[event]); } this.resetActivityCheck(); - }; - ConnectionManager.prototype.abandonConnection = function () { + } + abandonConnection() { if (!this.connection) { return; } @@ -2604,8 +2313,8 @@ var connection_manager_ConnectionManager = (function (_super) { var connection = this.connection; this.connection = null; return connection; - }; - ConnectionManager.prototype.updateState = function (newState, data) { + } + updateState(newState, data) { var previousState = this.state; this.state = newState; if (previousState !== newState) { @@ -2618,56 +2327,52 @@ var connection_manager_ConnectionManager = (function (_super) { this.emit('state_change', { previous: previousState, current: newState }); this.emit(newState, data); } - }; - ConnectionManager.prototype.shouldRetry = function () { + } + shouldRetry() { return this.state === 'connecting' || this.state === 'connected'; - }; - return ConnectionManager; -}(dispatcher)); -/* harmony default export */ var connection_manager = (connection_manager_ConnectionManager); + } +} // CONCATENATED MODULE: ./src/core/channels/channels.ts -var channels_Channels = (function () { - function Channels() { +class channels_Channels { + constructor() { this.channels = {}; } - Channels.prototype.add = function (name, pusher) { + add(name, pusher) { if (!this.channels[name]) { this.channels[name] = createChannel(name, pusher); } return this.channels[name]; - }; - Channels.prototype.all = function () { + } + all() { return values(this.channels); - }; - Channels.prototype.find = function (name) { + } + find(name) { return this.channels[name]; - }; - Channels.prototype.remove = function (name) { + } + remove(name) { var channel = this.channels[name]; delete this.channels[name]; return channel; - }; - Channels.prototype.disconnect = function () { + } + disconnect() { objectApply(this.channels, function (channel) { channel.disconnect(); }); - }; - return Channels; -}()); -/* harmony default export */ var channels = (channels_Channels); + } +} function createChannel(name, pusher) { if (name.indexOf('private-encrypted-') === 0) { if (pusher.config.nacl) { return factory.createEncryptedChannel(name, pusher, pusher.config.nacl); } - var errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; - var suffix = url_store.buildLogSuffix('encryptedChannelSupport'); - throw new UnsupportedFeature(errMsg + ". " + suffix); + let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available'; + let suffix = url_store.buildLogSuffix('encryptedChannelSupport'); + throw new UnsupportedFeature(`${errMsg}. ${suffix}`); } else if (name.indexOf('private-') === 0) { return factory.createPrivateChannel(name, pusher); @@ -2694,97 +2399,94 @@ function createChannel(name, pusher) { var Factory = { - createChannels: function () { - return new channels(); + createChannels() { + return new channels_Channels(); }, - createConnectionManager: function (key, options) { - return new connection_manager(key, options); + createConnectionManager(key, options) { + return new connection_manager_ConnectionManager(key, options); }, - createChannel: function (name, pusher) { - return new channels_channel(name, pusher); + createChannel(name, pusher) { + return new channel_Channel(name, pusher); }, - createPrivateChannel: function (name, pusher) { - return new private_channel(name, pusher); + createPrivateChannel(name, pusher) { + return new private_channel_PrivateChannel(name, pusher); }, - createPresenceChannel: function (name, pusher) { - return new presence_channel(name, pusher); + createPresenceChannel(name, pusher) { + return new presence_channel_PresenceChannel(name, pusher); }, - createEncryptedChannel: function (name, pusher, nacl) { - return new encrypted_channel(name, pusher, nacl); + createEncryptedChannel(name, pusher, nacl) { + return new encrypted_channel_EncryptedChannel(name, pusher, nacl); }, - createTimelineSender: function (timeline, options) { - return new timeline_sender(timeline, options); + createTimelineSender(timeline, options) { + return new timeline_sender_TimelineSender(timeline, options); }, - createHandshake: function (transport, callback) { - return new connection_handshake(transport, callback); + createHandshake(transport, callback) { + return new handshake_Handshake(transport, callback); }, - createAssistantToTheTransportManager: function (manager, transport, options) { - return new assistant_to_the_transport_manager(manager, transport, options); + createAssistantToTheTransportManager(manager, transport, options) { + return new assistant_to_the_transport_manager_AssistantToTheTransportManager(manager, transport, options); } }; /* harmony default export */ var factory = (Factory); // CONCATENATED MODULE: ./src/core/transports/transport_manager.ts -var transport_manager_TransportManager = (function () { - function TransportManager(options) { +class transport_manager_TransportManager { + constructor(options) { this.options = options || {}; this.livesLeft = this.options.lives || Infinity; } - TransportManager.prototype.getAssistant = function (transport) { + getAssistant(transport) { return factory.createAssistantToTheTransportManager(this, transport, { minPingDelay: this.options.minPingDelay, maxPingDelay: this.options.maxPingDelay }); - }; - TransportManager.prototype.isAlive = function () { + } + isAlive() { return this.livesLeft > 0; - }; - TransportManager.prototype.reportDeath = function () { + } + reportDeath() { this.livesLeft -= 1; - }; - return TransportManager; -}()); -/* harmony default export */ var transport_manager = (transport_manager_TransportManager); + } +} // CONCATENATED MODULE: ./src/core/strategies/sequential_strategy.ts -var sequential_strategy_SequentialStrategy = (function () { - function SequentialStrategy(strategies, options) { +class sequential_strategy_SequentialStrategy { + constructor(strategies, options) { this.strategies = strategies; this.loop = Boolean(options.loop); this.failFast = Boolean(options.failFast); this.timeout = options.timeout; this.timeoutLimit = options.timeoutLimit; } - SequentialStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - SequentialStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { var strategies = this.strategies; var current = 0; var timeout = this.timeout; var runner = null; - var tryNextStrategy = function (error, handshake) { + var tryNextStrategy = (error, handshake) => { if (handshake) { callback(null, handshake); } else { current = current + 1; - if (_this.loop) { + if (this.loop) { current = current % strategies.length; } if (current < strategies.length) { if (timeout) { timeout = timeout * 2; - if (_this.timeoutLimit) { - timeout = Math.min(timeout, _this.timeoutLimit); + if (this.timeoutLimit) { + timeout = Math.min(timeout, this.timeoutLimit); } } - runner = _this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: _this.failFast }, tryNextStrategy); + runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy); } else { callback(true); @@ -2803,12 +2505,12 @@ var sequential_strategy_SequentialStrategy = (function () { } } }; - }; - SequentialStrategy.prototype.tryStrategy = function (strategy, minPriority, options, callback) { + } + tryStrategy(strategy, minPriority, options, callback) { var timer = null; var runner = null; if (options.timeout > 0) { - timer = new OneOffTimer(options.timeout, function () { + timer = new timers_OneOffTimer(options.timeout, function () { runner.abort(); callback(true); }); @@ -2833,22 +2535,20 @@ var sequential_strategy_SequentialStrategy = (function () { runner.forceMinPriority(p); } }; - }; - return SequentialStrategy; -}()); -/* harmony default export */ var sequential_strategy = (sequential_strategy_SequentialStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/best_connected_ever_strategy.ts -var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { - function BestConnectedEverStrategy(strategies) { +class best_connected_ever_strategy_BestConnectedEverStrategy { + constructor(strategies) { this.strategies = strategies; } - BestConnectedEverStrategy.prototype.isSupported = function () { + isSupported() { return any(this.strategies, util.method('isSupported')); - }; - BestConnectedEverStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { return connect(this.strategies, minPriority, function (i, runners) { return function (error, handshake) { runners[i].error = error; @@ -2864,10 +2564,8 @@ var best_connected_ever_strategy_BestConnectedEverStrategy = (function () { callback(null, handshake); }; }); - }; - return BestConnectedEverStrategy; -}()); -/* harmony default export */ var best_connected_ever_strategy = (best_connected_ever_strategy_BestConnectedEverStrategy); + } +} function connect(strategies, minPriority, callbackBuilder) { var runners = map(strategies, function (strategy, i, _, rs) { return strategy.connect(minPriority, callbackBuilder(i, rs)); @@ -2900,18 +2598,18 @@ function abortRunner(runner) { -var cached_strategy_CachedStrategy = (function () { - function CachedStrategy(strategy, transports, options) { +class cached_strategy_CachedStrategy { + constructor(strategy, transports, options) { this.strategy = strategy; this.transports = transports; this.ttl = options.ttl || 1800 * 1000; this.usingTLS = options.useTLS; this.timeline = options.timeline; } - CachedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - CachedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var usingTLS = this.usingTLS; var info = fetchTransportCache(usingTLS); var strategies = [this.strategy]; @@ -2923,7 +2621,7 @@ var cached_strategy_CachedStrategy = (function () { transport: info.transport, latency: info.latency }); - strategies.push(new sequential_strategy([transport], { + strategies.push(new sequential_strategy_SequentialStrategy([transport], { timeout: info.latency * 2 + 1000, failFast: true })); @@ -2959,10 +2657,8 @@ var cached_strategy_CachedStrategy = (function () { } } }; - }; - return CachedStrategy; -}()); -/* harmony default export */ var cached_strategy = (cached_strategy_CachedStrategy); + } +} function getTransportCacheKey(usingTLS) { return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS'); } @@ -3008,19 +2704,18 @@ function flushTransportCache(usingTLS) { // CONCATENATED MODULE: ./src/core/strategies/delayed_strategy.ts -var delayed_strategy_DelayedStrategy = (function () { - function DelayedStrategy(strategy, _a) { - var number = _a.delay; +class delayed_strategy_DelayedStrategy { + constructor(strategy, { delay: number }) { this.strategy = strategy; this.options = { delay: number }; } - DelayedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - DelayedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var strategy = this.strategy; var runner; - var timer = new OneOffTimer(this.options.delay, function () { + var timer = new timers_OneOffTimer(this.options.delay, function () { runner = strategy.connect(minPriority, callback); }); return { @@ -3037,39 +2732,35 @@ var delayed_strategy_DelayedStrategy = (function () { } } }; - }; - return DelayedStrategy; -}()); -/* harmony default export */ var delayed_strategy = (delayed_strategy_DelayedStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/if_strategy.ts -var IfStrategy = (function () { - function IfStrategy(test, trueBranch, falseBranch) { +class IfStrategy { + constructor(test, trueBranch, falseBranch) { this.test = test; this.trueBranch = trueBranch; this.falseBranch = falseBranch; } - IfStrategy.prototype.isSupported = function () { + isSupported() { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.isSupported(); - }; - IfStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var branch = this.test() ? this.trueBranch : this.falseBranch; return branch.connect(minPriority, callback); - }; - return IfStrategy; -}()); -/* harmony default export */ var if_strategy = (IfStrategy); + } +} // CONCATENATED MODULE: ./src/core/strategies/first_connected_strategy.ts -var FirstConnectedStrategy = (function () { - function FirstConnectedStrategy(strategy) { +class FirstConnectedStrategy { + constructor(strategy) { this.strategy = strategy; } - FirstConnectedStrategy.prototype.isSupported = function () { + isSupported() { return this.strategy.isSupported(); - }; - FirstConnectedStrategy.prototype.connect = function (minPriority, callback) { + } + connect(minPriority, callback) { var runner = this.strategy.connect(minPriority, function (error, handshake) { if (handshake) { runner.abort(); @@ -3077,10 +2768,8 @@ var FirstConnectedStrategy = (function () { callback(error, handshake); }); return runner; - }; - return FirstConnectedStrategy; -}()); -/* harmony default export */ var first_connected_strategy = (FirstConnectedStrategy); + } +} // CONCATENATED MODULE: ./src/runtimes/isomorphic/default_strategy.ts @@ -3121,12 +2810,12 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { timeout: 15000, timeoutLimit: 60000 }; - var ws_manager = new transport_manager({ + var ws_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout }); - var streaming_manager = new transport_manager({ + var streaming_manager = new transport_manager_TransportManager({ lives: 2, minPingDelay: 10000, maxPingDelay: config.activityTimeout @@ -3135,31 +2824,31 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { var wss_transport = defineTransportStrategy('wss', 'ws', 3, wss_options, ws_manager); var xhr_streaming_transport = defineTransportStrategy('xhr_streaming', 'xhr_streaming', 1, http_options, streaming_manager); var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, http_options); - var ws_loop = new sequential_strategy([ws_transport], timeouts); - var wss_loop = new sequential_strategy([wss_transport], timeouts); - var streaming_loop = new sequential_strategy([xhr_streaming_transport], timeouts); - var polling_loop = new sequential_strategy([xhr_polling_transport], timeouts); - var http_loop = new sequential_strategy([ - new if_strategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy([ + var ws_loop = new sequential_strategy_SequentialStrategy([ws_transport], timeouts); + var wss_loop = new sequential_strategy_SequentialStrategy([wss_transport], timeouts); + var streaming_loop = new sequential_strategy_SequentialStrategy([xhr_streaming_transport], timeouts); + var polling_loop = new sequential_strategy_SequentialStrategy([xhr_polling_transport], timeouts); + var http_loop = new sequential_strategy_SequentialStrategy([ + new IfStrategy(testSupportsStrategy(streaming_loop), new best_connected_ever_strategy_BestConnectedEverStrategy([ streaming_loop, - new delayed_strategy(polling_loop, { delay: 4000 }) + new delayed_strategy_DelayedStrategy(polling_loop, { delay: 4000 }) ]), polling_loop) ], timeouts); var wsStrategy; if (baseOptions.useTLS) { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(http_loop, { delay: 2000 }) + new delayed_strategy_DelayedStrategy(http_loop, { delay: 2000 }) ]); } else { - wsStrategy = new best_connected_ever_strategy([ + wsStrategy = new best_connected_ever_strategy_BestConnectedEverStrategy([ ws_loop, - new delayed_strategy(wss_loop, { delay: 2000 }), - new delayed_strategy(http_loop, { delay: 5000 }) + new delayed_strategy_DelayedStrategy(wss_loop, { delay: 2000 }), + new delayed_strategy_DelayedStrategy(http_loop, { delay: 5000 }) ]); } - return new cached_strategy(new first_connected_strategy(new if_strategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { + return new cached_strategy_CachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)), definedTransports, { ttl: 1800000, timeline: baseOptions.timeline, useTLS: baseOptions.useTLS @@ -3182,37 +2871,21 @@ var getDefaultStrategy = function (config, baseOptions, defineTransport) { }); // CONCATENATED MODULE: ./src/core/http/http_request.ts -var http_request_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var MAX_BUFFER_LENGTH = 256 * 1024; -var http_request_HTTPRequest = (function (_super) { - http_request_extends(HTTPRequest, _super); - function HTTPRequest(hooks, method, url) { - var _this = _super.call(this) || this; - _this.hooks = hooks; - _this.method = method; - _this.url = url; - return _this; +const MAX_BUFFER_LENGTH = 256 * 1024; +class http_request_HTTPRequest extends dispatcher_Dispatcher { + constructor(hooks, method, url) { + super(); + this.hooks = hooks; + this.method = method; + this.url = url; } - HTTPRequest.prototype.start = function (payload) { - var _this = this; + start(payload) { this.position = 0; this.xhr = this.hooks.getRequest(this); - this.unloader = function () { - _this.close(); + this.unloader = () => { + this.close(); }; worker_runtime.addUnloadListener(this.unloader); this.xhr.open(this.method, this.url, true); @@ -3220,8 +2893,8 @@ var http_request_HTTPRequest = (function (_super) { this.xhr.setRequestHeader('Content-Type', 'application/json'); } this.xhr.send(payload); - }; - HTTPRequest.prototype.close = function () { + } + close() { if (this.unloader) { worker_runtime.removeUnloadListener(this.unloader); this.unloader = null; @@ -3230,8 +2903,8 @@ var http_request_HTTPRequest = (function (_super) { this.hooks.abortRequest(this.xhr); this.xhr = null; } - }; - HTTPRequest.prototype.onChunk = function (status, data) { + } + onChunk(status, data) { while (true) { var chunk = this.advanceBuffer(data); if (chunk) { @@ -3244,8 +2917,8 @@ var http_request_HTTPRequest = (function (_super) { if (this.isBufferTooLong(data)) { this.emit('buffer_too_long'); } - }; - HTTPRequest.prototype.advanceBuffer = function (buffer) { + } + advanceBuffer(buffer) { var unreadData = buffer.slice(this.position); var endOfLinePosition = unreadData.indexOf('\n'); if (endOfLinePosition !== -1) { @@ -3255,13 +2928,11 @@ var http_request_HTTPRequest = (function (_super) { else { return null; } - }; - HTTPRequest.prototype.isBufferTooLong = function (buffer) { + } + isBufferTooLong(buffer) { return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH; - }; - return HTTPRequest; -}(dispatcher)); -/* harmony default export */ var http_request = (http_request_HTTPRequest); + } +} // CONCATENATED MODULE: ./src/core/http/state.ts var State; @@ -3277,24 +2948,24 @@ var State; var autoIncrement = 1; -var http_socket_HTTPSocket = (function () { - function HTTPSocket(hooks, url) { +class http_socket_HTTPSocket { + constructor(hooks, url) { this.hooks = hooks; this.session = randomNumber(1000) + '/' + randomString(8); this.location = getLocation(url); this.readyState = state.CONNECTING; this.openStream(); } - HTTPSocket.prototype.send = function (payload) { + send(payload) { return this.sendRaw(JSON.stringify([payload])); - }; - HTTPSocket.prototype.ping = function () { + } + ping() { this.hooks.sendHeartbeat(this); - }; - HTTPSocket.prototype.close = function (code, reason) { + } + close(code, reason) { this.onClose(code, reason, true); - }; - HTTPSocket.prototype.sendRaw = function (payload) { + } + sendRaw(payload) { if (this.readyState === state.OPEN) { try { worker_runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload); @@ -3307,12 +2978,12 @@ var http_socket_HTTPSocket = (function () { else { return false; } - }; - HTTPSocket.prototype.reconnect = function () { + } + reconnect() { this.closeStream(); this.openStream(); - }; - HTTPSocket.prototype.onClose = function (code, reason, wasClean) { + } + onClose(code, reason, wasClean) { this.closeStream(); this.readyState = state.CLOSED; if (this.onclose) { @@ -3322,8 +2993,8 @@ var http_socket_HTTPSocket = (function () { wasClean: wasClean }); } - }; - HTTPSocket.prototype.onChunk = function (chunk) { + } + onChunk(chunk) { if (chunk.status !== 200) { return; } @@ -3355,8 +3026,8 @@ var http_socket_HTTPSocket = (function () { this.onClose(payload[0], payload[1], true); break; } - }; - HTTPSocket.prototype.onOpen = function (options) { + } + onOpen(options) { if (this.readyState === state.CONNECTING) { if (options && options.hostname) { this.location.base = replaceHost(this.location.base, options.hostname); @@ -3369,53 +3040,51 @@ var http_socket_HTTPSocket = (function () { else { this.onClose(1006, 'Server lost session', true); } - }; - HTTPSocket.prototype.onEvent = function (event) { + } + onEvent(event) { if (this.readyState === state.OPEN && this.onmessage) { this.onmessage({ data: event }); } - }; - HTTPSocket.prototype.onActivity = function () { + } + onActivity() { if (this.onactivity) { this.onactivity(); } - }; - HTTPSocket.prototype.onError = function (error) { + } + onError(error) { if (this.onerror) { this.onerror(error); } - }; - HTTPSocket.prototype.openStream = function () { - var _this = this; + } + openStream() { this.stream = worker_runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))); - this.stream.bind('chunk', function (chunk) { - _this.onChunk(chunk); + this.stream.bind('chunk', chunk => { + this.onChunk(chunk); }); - this.stream.bind('finished', function (status) { - _this.hooks.onFinished(_this, status); + this.stream.bind('finished', status => { + this.hooks.onFinished(this, status); }); - this.stream.bind('buffer_too_long', function () { - _this.reconnect(); + this.stream.bind('buffer_too_long', () => { + this.reconnect(); }); try { this.stream.start(); } catch (error) { - util.defer(function () { - _this.onError(error); - _this.onClose(1006, 'Could not start streaming', false); + util.defer(() => { + this.onError(error); + this.onClose(1006, 'Could not start streaming', false); }); } - }; - HTTPSocket.prototype.closeStream = function () { + } + closeStream() { if (this.stream) { this.stream.unbind_all(); this.stream.close(); this.stream = null; } - }; - return HTTPSocket; -}()); + } +} function getLocation(url) { var parts = /([^\?]*)\/*(\??.*)/.exec(url); return { @@ -3522,20 +3191,20 @@ var http_xhr_request_hooks = { var HTTP = { - createStreamingSocket: function (url) { + createStreamingSocket(url) { return this.createSocket(http_streaming_socket, url); }, - createPollingSocket: function (url) { + createPollingSocket(url) { return this.createSocket(http_polling_socket, url); }, - createSocket: function (hooks, url) { + createSocket(hooks, url) { return new http_socket(hooks, url); }, - createXHR: function (method, url) { + createXHR(method, url) { return this.createRequest(http_xhr_request, method, url); }, - createRequest: function (hooks, method, url) { - return new http_request(hooks, method, url); + createRequest(hooks, method, url) { + return new http_request_HTTPRequest(hooks, method, url); } }; /* harmony default export */ var http_http = (HTTP); @@ -3551,24 +3220,24 @@ var Isomorphic = { Transports: transports, transportConnectionInitializer: transport_connection_initializer, HTTPFactory: http_http, - setup: function (PusherClass) { + setup(PusherClass) { PusherClass.ready(); }, - getLocalStorage: function () { + getLocalStorage() { return undefined; }, - getClientFeatures: function () { + getClientFeatures() { return keys(filterObject({ ws: transports.ws }, function (t) { return t.isSupported({}); })); }, - getProtocol: function () { + getProtocol() { return 'http:'; }, - isXHRSupported: function () { + isXHRSupported() { return true; }, - createSocketRequest: function (method, url) { + createSocketRequest(method, url) { if (this.isXHRSupported()) { return this.HTTPFactory.createXHR(method, url); } @@ -3576,46 +3245,27 @@ var Isomorphic = { throw 'Cross-origin HTTP requests are not supported'; } }, - createXHR: function () { + createXHR() { var Constructor = this.getXHRAPI(); return new Constructor(); }, - createWebSocket: function (url) { + createWebSocket(url) { var Constructor = this.getWebSocketAPI(); return new Constructor(url); }, - addUnloadListener: function (listener) { }, - removeUnloadListener: function (listener) { } + addUnloadListener(listener) { }, + removeUnloadListener(listener) { } }; /* harmony default export */ var runtime = (Isomorphic); // CONCATENATED MODULE: ./src/runtimes/worker/net_info.ts -var net_info_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var NetInfo = (function (_super) { - net_info_extends(NetInfo, _super); - function NetInfo() { - return _super !== null && _super.apply(this, arguments) || this; - } - NetInfo.prototype.isOnline = function () { +class net_info_NetInfo extends dispatcher_Dispatcher { + isOnline() { return true; - }; - return NetInfo; -}(dispatcher)); - -var net_info_Network = new NetInfo(); + } +} +var net_info_Network = new net_info_NetInfo(); // CONCATENATED MODULE: ./src/runtimes/worker/auth/fetch_auth.ts @@ -3626,36 +3276,37 @@ var fetchAuth = function (context, query, authOptions, authRequestType, callback headers.set(headerName, authOptions.headers[headerName]); } if (authOptions.headersProvider != null) { - var dynamicHeaders = authOptions.headersProvider(); + const dynamicHeaders = authOptions.headersProvider(); for (var headerName in dynamicHeaders) { headers.set(headerName, dynamicHeaders[headerName]); } } var body = query; var request = new Request(authOptions.endpoint, { - headers: headers, - body: body, + headers, + body, credentials: 'same-origin', method: 'POST' }); return fetch(request) - .then(function (response) { - var status = response.status; + .then(response => { + let { status } = response; if (status === 200) { return response.text(); } - throw new HTTPAuthError(status, "Could not get " + authRequestType.toString() + " info from your auth endpoint, status: " + status); + throw new HTTPAuthError(status, `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`); }) - .then(function (data) { - var parsedData; + .then(data => { + let parsedData; try { parsedData = JSON.parse(data); } catch (e) { - throw new HTTPAuthError(200, "JSON returned from " + authRequestType.toString() + " endpoint was invalid, yet status code was 200. Data was: " + data); + throw new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`); } callback(null, parsedData); - })["catch"](function (err) { + }) + .catch(err => { callback(err, null); }); }; @@ -3671,25 +3322,25 @@ var getAgent = function (sender, useTLS) { var query = buildQueryString(data); url += '/' + 2 + '?' + query; fetch(url) - .then(function (response) { + .then(response => { if (response.status !== 200) { - throw "received " + response.status + " from stats.pusher.com"; + throw `received ${response.status} from stats.pusher.com`; } return response.json(); }) - .then(function (_a) { - var host = _a.host; + .then(({ host }) => { if (host) { sender.host = host; } - })["catch"](function (err) { + }) + .catch(err => { logger.debug('TimelineSender Error: ', err); }); }; }; var fetchTimeline = { name: 'xhr', - getAgent: getAgent + getAgent }; /* harmony default export */ var fetch_timeline = (fetchTimeline); @@ -3698,38 +3349,38 @@ var fetchTimeline = { -var runtime_getDefaultStrategy = runtime.getDefaultStrategy, runtime_Transports = runtime.Transports, setup = runtime.setup, getProtocol = runtime.getProtocol, isXHRSupported = runtime.isXHRSupported, getLocalStorage = runtime.getLocalStorage, createXHR = runtime.createXHR, createWebSocket = runtime.createWebSocket, addUnloadListener = runtime.addUnloadListener, removeUnloadListener = runtime.removeUnloadListener, transportConnectionInitializer = runtime.transportConnectionInitializer, createSocketRequest = runtime.createSocketRequest, HTTPFactory = runtime.HTTPFactory; -var Worker = { +const { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, setup, getProtocol, isXHRSupported, getLocalStorage, createXHR, createWebSocket, addUnloadListener, removeUnloadListener, transportConnectionInitializer, createSocketRequest, HTTPFactory } = runtime; +const Worker = { getDefaultStrategy: runtime_getDefaultStrategy, Transports: runtime_Transports, - setup: setup, - getProtocol: getProtocol, - isXHRSupported: isXHRSupported, - getLocalStorage: getLocalStorage, - createXHR: createXHR, - createWebSocket: createWebSocket, - addUnloadListener: addUnloadListener, - removeUnloadListener: removeUnloadListener, - transportConnectionInitializer: transportConnectionInitializer, - createSocketRequest: createSocketRequest, - HTTPFactory: HTTPFactory, + setup, + getProtocol, + isXHRSupported, + getLocalStorage, + createXHR, + createWebSocket, + addUnloadListener, + removeUnloadListener, + transportConnectionInitializer, + createSocketRequest, + HTTPFactory, TimelineTransport: fetch_timeline, - getAuthorizers: function () { + getAuthorizers() { return { ajax: fetch_auth }; }, - getWebSocketAPI: function () { + getWebSocketAPI() { return WebSocket; }, - getXHRAPI: function () { + getXHRAPI() { return XMLHttpRequest; }, - getNetwork: function () { + getNetwork() { return net_info_Network; }, - randomInt: function (max) { - var random = function () { - var crypto = globalThis.crypto || globalThis['msCrypto']; - var random = crypto.getRandomValues(new Uint32Array(1))[0]; + randomInt(max) { + const random = function () { + const crypto = globalThis.crypto || globalThis['msCrypto']; + const random = crypto.getRandomValues(new Uint32Array(1))[0]; return random / Math.pow(2, 32); }; return Math.floor(random() * max); @@ -3750,8 +3401,8 @@ var TimelineLevel; -var timeline_Timeline = (function () { - function Timeline(key, session, options) { +class timeline_Timeline { + constructor(key, session, options) { this.key = key; this.session = session; this.events = []; @@ -3759,28 +3410,27 @@ var timeline_Timeline = (function () { this.sent = 0; this.uniqueID = 0; } - Timeline.prototype.log = function (level, event) { + log(level, event) { if (level <= this.options.level) { this.events.push(extend({}, event, { timestamp: util.now() })); if (this.options.limit && this.events.length > this.options.limit) { this.events.shift(); } } - }; - Timeline.prototype.error = function (event) { + } + error(event) { this.log(timeline_level.ERROR, event); - }; - Timeline.prototype.info = function (event) { + } + info(event) { this.log(timeline_level.INFO, event); - }; - Timeline.prototype.debug = function (event) { + } + debug(event) { this.log(timeline_level.DEBUG, event); - }; - Timeline.prototype.isEmpty = function () { + } + isEmpty() { return this.events.length === 0; - }; - Timeline.prototype.send = function (sendfn, callback) { - var _this = this; + } + send(sendfn, callback) { var data = extend({ session: this.session, bundle: this.sent + 1, @@ -3792,43 +3442,40 @@ var timeline_Timeline = (function () { timeline: this.events }, this.options.params); this.events = []; - sendfn(data, function (error, result) { + sendfn(data, (error, result) => { if (!error) { - _this.sent++; + this.sent++; } if (callback) { callback(error, result); } }); return true; - }; - Timeline.prototype.generateUniqueID = function () { + } + generateUniqueID() { this.uniqueID++; return this.uniqueID; - }; - return Timeline; -}()); -/* harmony default export */ var timeline_timeline = (timeline_Timeline); + } +} // CONCATENATED MODULE: ./src/core/strategies/transport_strategy.ts -var transport_strategy_TransportStrategy = (function () { - function TransportStrategy(name, priority, transport, options) { +class transport_strategy_TransportStrategy { + constructor(name, priority, transport, options) { this.name = name; this.priority = priority; this.transport = transport; this.options = options || {}; } - TransportStrategy.prototype.isSupported = function () { + isSupported() { return this.transport.isSupported({ useTLS: this.options.useTLS }); - }; - TransportStrategy.prototype.connect = function (minPriority, callback) { - var _this = this; + } + connect(minPriority, callback) { if (!this.isSupported()) { return failAttempt(new UnsupportedStrategy(), callback); } @@ -3871,7 +3518,7 @@ var transport_strategy_TransportStrategy = (function () { transport.bind('closed', onClosed); transport.initialize(); return { - abort: function () { + abort: () => { if (connected) { return; } @@ -3883,11 +3530,11 @@ var transport_strategy_TransportStrategy = (function () { transport.close(); } }, - forceMinPriority: function (p) { + forceMinPriority: p => { if (connected) { return; } - if (_this.priority < p) { + if (this.priority < p) { if (handshake) { handshake.close(); } @@ -3897,10 +3544,8 @@ var transport_strategy_TransportStrategy = (function () { } } }; - }; - return TransportStrategy; -}()); -/* harmony default export */ var transport_strategy = (transport_strategy_TransportStrategy); + } +} function failAttempt(error, callback) { util.defer(function () { callback(error); @@ -3917,7 +3562,7 @@ function failAttempt(error, callback) { -var strategy_builder_Transports = worker_runtime.Transports; +const { Transports: strategy_builder_Transports } = worker_runtime; var strategy_builder_defineTransport = function (config, name, type, priority, options, manager) { var transportClass = strategy_builder_Transports[type]; if (!transportClass) { @@ -3930,7 +3575,7 @@ var strategy_builder_defineTransport = function (config, name, type, priority, o var transport; if (enabled) { options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options); - transport = new transport_strategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); + transport = new transport_strategy_TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options); } else { transport = strategy_builder_UnsupportedStrategy; @@ -3978,7 +3623,7 @@ var AuthRequestType; // CONCATENATED MODULE: ./src/core/auth/user_authenticator.ts -var composeChannelQuery = function (params, authOptions) { +const composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); for (var key in authOptions.params) { query += @@ -3988,7 +3633,7 @@ var composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -3999,12 +3644,12 @@ var composeChannelQuery = function (params, authOptions) { } return query; }; -var UserAuthenticator = function (authOptions) { +const UserAuthenticator = (authOptions) => { if (typeof worker_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = composeChannelQuery(params, authOptions); worker_runtime.getAuthorizers()[authOptions.transport](worker_runtime, query, authOptions, AuthRequestType.UserAuthentication, callback); }; }; @@ -4013,7 +3658,7 @@ var UserAuthenticator = function (authOptions) { // CONCATENATED MODULE: ./src/core/auth/channel_authorizer.ts -var channel_authorizer_composeChannelQuery = function (params, authOptions) { +const channel_authorizer_composeChannelQuery = (params, authOptions) => { var query = 'socket_id=' + encodeURIComponent(params.socketId); query += '&channel_name=' + encodeURIComponent(params.channelName); for (var key in authOptions.params) { @@ -4024,7 +3669,7 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { encodeURIComponent(authOptions.params[key]); } if (authOptions.paramsProvider != null) { - var dynamicParams = authOptions.paramsProvider(); + let dynamicParams = authOptions.paramsProvider(); for (var key in dynamicParams) { query += '&' + @@ -4035,20 +3680,20 @@ var channel_authorizer_composeChannelQuery = function (params, authOptions) { } return query; }; -var ChannelAuthorizer = function (authOptions) { +const ChannelAuthorizer = (authOptions) => { if (typeof worker_runtime.getAuthorizers()[authOptions.transport] === 'undefined') { - throw "'" + authOptions.transport + "' is not a recognized auth transport"; + throw `'${authOptions.transport}' is not a recognized auth transport`; } - return function (params, callback) { - var query = channel_authorizer_composeChannelQuery(params, authOptions); + return (params, callback) => { + const query = channel_authorizer_composeChannelQuery(params, authOptions); worker_runtime.getAuthorizers()[authOptions.transport](worker_runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback); }; }; /* harmony default export */ var channel_authorizer = (ChannelAuthorizer); // CONCATENATED MODULE: ./src/core/auth/deprecated_channel_authorizer.ts -var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGenerator) { - var deprecatedAuthorizerOptions = { +const ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => { + const deprecatedAuthorizerOptions = { authTransport: authOptions.transport, authEndpoint: authOptions.endpoint, auth: { @@ -4056,32 +3701,21 @@ var ChannelAuthorizerProxy = function (pusher, authOptions, channelAuthorizerGen headers: authOptions.headers } }; - return function (params, callback) { - var channel = pusher.channel(params.channelName); - var channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); + return (params, callback) => { + const channel = pusher.channel(params.channelName); + const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions); channelAuthorizer.authorize(params.socketId, callback); }; }; // CONCATENATED MODULE: ./src/core/config.ts -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; function getConfig(opts, pusher) { - var config = { + let config = { activityTimeout: opts.activityTimeout || defaults.activityTimeout, cluster: opts.cluster, httpPath: opts.httpPath || defaults.httpPath, @@ -4118,7 +3752,7 @@ function getHttpHost(opts) { return opts.httpHost; } if (opts.cluster) { - return "sockjs-" + opts.cluster + ".pusher.com"; + return `sockjs-${opts.cluster}.pusher.com`; } return defaults.httpHost; } @@ -4129,7 +3763,7 @@ function getWebsocketHost(opts) { return getWebsocketHostFromCluster(opts.cluster); } function getWebsocketHostFromCluster(cluster) { - return "ws-" + cluster + ".pusher.com"; + return `ws-${cluster}.pusher.com`; } function shouldUseTLS(opts) { if (worker_runtime.getProtocol() === 'https:') { @@ -4150,7 +3784,7 @@ function getEnableStatsConfig(opts) { return false; } function buildUserAuthenticator(opts) { - var userAuthentication = __assign(__assign({}, defaults.userAuthentication), opts.userAuthentication); + const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication); if ('customHandler' in userAuthentication && userAuthentication['customHandler'] != null) { return userAuthentication['customHandler']; @@ -4158,9 +3792,9 @@ function buildUserAuthenticator(opts) { return user_authenticator(userAuthentication); } function buildChannelAuth(opts, pusher) { - var channelAuthorization; + let channelAuthorization; if ('channelAuthorization' in opts) { - channelAuthorization = __assign(__assign({}, defaults.channelAuthorization), opts.channelAuthorization); + channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization); } else { channelAuthorization = { @@ -4179,7 +3813,7 @@ function buildChannelAuth(opts, pusher) { return channelAuthorization; } function buildChannelAuthorizer(opts, pusher) { - var channelAuthorization = buildChannelAuth(opts, pusher); + const channelAuthorization = buildChannelAuth(opts, pusher); if ('customHandler' in channelAuthorization && channelAuthorization['customHandler'] != null) { return channelAuthorization['customHandler']; @@ -4188,134 +3822,99 @@ function buildChannelAuthorizer(opts, pusher) { } // CONCATENATED MODULE: ./src/core/watchlist.ts -var watchlist_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var watchlist_WatchlistFacade = (function (_super) { - watchlist_extends(WatchlistFacade, _super); - function WatchlistFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { - logger.debug("No callbacks on watchlist events for " + eventName); - }) || this; - _this.pusher = pusher; - _this.bindWatchlistInternalEvent(); - return _this; - } - WatchlistFacade.prototype.handleEvent = function (pusherEvent) { - var _this = this; - pusherEvent.data.events.forEach(function (watchlistEvent) { - _this.emit(watchlistEvent.name, watchlistEvent); +class watchlist_WatchlistFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { + logger.debug(`No callbacks on watchlist events for ${eventName}`); }); - }; - WatchlistFacade.prototype.bindWatchlistInternalEvent = function () { - var _this = this; - this.pusher.connection.bind('message', function (pusherEvent) { + this.pusher = pusher; + this.bindWatchlistInternalEvent(); + } + handleEvent(pusherEvent) { + pusherEvent.data.events.forEach(watchlistEvent => { + this.emit(watchlistEvent.name, watchlistEvent); + }); + } + bindWatchlistInternalEvent() { + this.pusher.connection.bind('message', pusherEvent => { var eventName = pusherEvent.event; if (eventName === 'pusher_internal:watchlist_events') { - _this.handleEvent(pusherEvent); + this.handleEvent(pusherEvent); } }); - }; - return WatchlistFacade; -}(dispatcher)); -/* harmony default export */ var watchlist = (watchlist_WatchlistFacade); + } +} // CONCATENATED MODULE: ./src/core/utils/flat_promise.ts function flatPromise() { - var resolve, reject; - var promise = new Promise(function (res, rej) { + let resolve, reject; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); - return { promise: promise, resolve: resolve, reject: reject }; + return { promise, resolve, reject }; } /* harmony default export */ var flat_promise = (flatPromise); // CONCATENATED MODULE: ./src/core/user.ts -var user_extends = (undefined && undefined.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var user_UserFacade = (function (_super) { - user_extends(UserFacade, _super); - function UserFacade(pusher) { - var _this = _super.call(this, function (eventName, data) { +class user_UserFacade extends dispatcher_Dispatcher { + constructor(pusher) { + super(function (eventName, data) { logger.debug('No callbacks on user for ' + eventName); - }) || this; - _this.signin_requested = false; - _this.user_data = null; - _this.serverToUserChannel = null; - _this.signinDonePromise = null; - _this._signinDoneResolve = null; - _this._onAuthorize = function (err, authData) { + }); + this.signin_requested = false; + this.user_data = null; + this.serverToUserChannel = null; + this.signinDonePromise = null; + this._signinDoneResolve = null; + this._onAuthorize = (err, authData) => { if (err) { - logger.warn("Error during signin: " + err); - _this._cleanup(); + logger.warn(`Error during signin: ${err}`); + this._cleanup(); return; } - _this.pusher.send_event('pusher:signin', { + this.pusher.send_event('pusher:signin', { auth: authData.auth, user_data: authData.user_data }); }; - _this.pusher = pusher; - _this.pusher.connection.bind('state_change', function (_a) { - var previous = _a.previous, current = _a.current; + this.pusher = pusher; + this.pusher.connection.bind('state_change', ({ previous, current }) => { if (previous !== 'connected' && current === 'connected') { - _this._signin(); + this._signin(); } if (previous === 'connected' && current !== 'connected') { - _this._cleanup(); - _this._newSigninPromiseIfNeeded(); + this._cleanup(); + this._newSigninPromiseIfNeeded(); } }); - _this.watchlist = new watchlist(pusher); - _this.pusher.connection.bind('message', function (event) { + this.watchlist = new watchlist_WatchlistFacade(pusher); + this.pusher.connection.bind('message', event => { var eventName = event.event; if (eventName === 'pusher:signin_success') { - _this._onSigninSuccess(event.data); + this._onSigninSuccess(event.data); } - if (_this.serverToUserChannel && - _this.serverToUserChannel.name === event.channel) { - _this.serverToUserChannel.handleEvent(event); + if (this.serverToUserChannel && + this.serverToUserChannel.name === event.channel) { + this.serverToUserChannel.handleEvent(event); } }); - return _this; } - UserFacade.prototype.signin = function () { + signin() { if (this.signin_requested) { return; } this.signin_requested = true; this._signin(); - }; - UserFacade.prototype._signin = function () { + } + _signin() { if (!this.signin_requested) { return; } @@ -4326,46 +3925,45 @@ var user_UserFacade = (function (_super) { this.pusher.config.userAuthenticator({ socketId: this.pusher.connection.socket_id }, this._onAuthorize); - }; - UserFacade.prototype._onSigninSuccess = function (data) { + } + _onSigninSuccess(data) { try { this.user_data = JSON.parse(data.user_data); } catch (e) { - logger.error("Failed parsing user data after signin: " + data.user_data); + logger.error(`Failed parsing user data after signin: ${data.user_data}`); this._cleanup(); return; } if (typeof this.user_data.id !== 'string' || this.user_data.id === '') { - logger.error("user_data doesn't contain an id. user_data: " + this.user_data); + logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`); this._cleanup(); return; } this._signinDoneResolve(); this._subscribeChannels(); - }; - UserFacade.prototype._subscribeChannels = function () { - var _this = this; - var ensure_subscribed = function (channel) { + } + _subscribeChannels() { + const ensure_subscribed = channel => { if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); } else if (!channel.subscriptionPending && - _this.pusher.connection.state === 'connected') { + this.pusher.connection.state === 'connected') { channel.subscribe(); } }; - this.serverToUserChannel = new channels_channel("#server-to-user-" + this.user_data.id, this.pusher); - this.serverToUserChannel.bind_global(function (eventName, data) { + this.serverToUserChannel = new channel_Channel(`#server-to-user-${this.user_data.id}`, this.pusher); + this.serverToUserChannel.bind_global((eventName, data) => { if (eventName.indexOf('pusher_internal:') === 0 || eventName.indexOf('pusher:') === 0) { return; } - _this.emit(eventName, data); + this.emit(eventName, data); }); ensure_subscribed(this.serverToUserChannel); - }; - UserFacade.prototype._cleanup = function () { + } + _cleanup() { this.user_data = null; if (this.serverToUserChannel) { this.serverToUserChannel.unbind_all(); @@ -4375,26 +3973,24 @@ var user_UserFacade = (function (_super) { if (this.signin_requested) { this._signinDoneResolve(); } - }; - UserFacade.prototype._newSigninPromiseIfNeeded = function () { + } + _newSigninPromiseIfNeeded() { if (!this.signin_requested) { return; } if (this.signinDonePromise && !this.signinDonePromise.done) { return; } - var _a = flat_promise(), promise = _a.promise, resolve = _a.resolve, _ = _a.reject; + const { promise, resolve, reject: _ } = flat_promise(); promise.done = false; - var setDone = function () { + const setDone = () => { promise.done = true; }; - promise.then(setDone)["catch"](setDone); + promise.then(setDone).catch(setDone); this.signinDonePromise = promise; this._signinDoneResolve = resolve; - }; - return UserFacade; -}(dispatcher)); -/* harmony default export */ var user = (user_UserFacade); + } +} // CONCATENATED MODULE: ./src/core/pusher.ts @@ -4410,19 +4006,29 @@ var user_UserFacade = (function (_super) { -var pusher_Pusher = (function () { - function Pusher(app_key, options) { - var _this = this; +class pusher_Pusher { + static ready() { + pusher_Pusher.isReady = true; + for (var i = 0, l = pusher_Pusher.instances.length; i < l; i++) { + pusher_Pusher.instances[i].connect(); + } + } + static getClientFeatures() { + return keys(filterObject({ ws: worker_runtime.Transports.ws }, function (t) { + return t.isSupported({}); + })); + } + constructor(app_key, options) { checkAppKey(app_key); validateOptions(options); this.key = app_key; this.config = getConfig(options, this); this.channels = factory.createChannels(); - this.global_emitter = new dispatcher(); + this.global_emitter = new dispatcher_Dispatcher(); this.sessionID = worker_runtime.randomInt(1000000000); - this.timeline = new timeline_timeline(this.key, this.sessionID, { + this.timeline = new timeline_Timeline(this.key, this.sessionID, { cluster: this.config.cluster, - features: Pusher.getClientFeatures(), + features: pusher_Pusher.getClientFeatures(), params: this.config.timelineParams || {}, limit: 50, level: timeline_level.INFO, @@ -4434,8 +4040,8 @@ var pusher_Pusher = (function () { path: '/timeline/v2/' + worker_runtime.TimelineTransport.name }); } - var getStrategy = function (options) { - return worker_runtime.getDefaultStrategy(_this.config, options, strategy_builder_defineTransport); + var getStrategy = (options) => { + return worker_runtime.getDefaultStrategy(this.config, options, strategy_builder_defineTransport); }; this.connection = factory.createConnectionManager(this.key, { getStrategy: getStrategy, @@ -4445,106 +4051,95 @@ var pusher_Pusher = (function () { unavailableTimeout: this.config.unavailableTimeout, useTLS: Boolean(this.config.useTLS) }); - this.connection.bind('connected', function () { - _this.subscribeAll(); - if (_this.timelineSender) { - _this.timelineSender.send(_this.connection.isUsingTLS()); + this.connection.bind('connected', () => { + this.subscribeAll(); + if (this.timelineSender) { + this.timelineSender.send(this.connection.isUsingTLS()); } }); - this.connection.bind('message', function (event) { + this.connection.bind('message', event => { var eventName = event.event; var internal = eventName.indexOf('pusher_internal:') === 0; if (event.channel) { - var channel = _this.channel(event.channel); + var channel = this.channel(event.channel); if (channel) { channel.handleEvent(event); } } if (!internal) { - _this.global_emitter.emit(event.event, event.data); + this.global_emitter.emit(event.event, event.data); } }); - this.connection.bind('connecting', function () { - _this.channels.disconnect(); + this.connection.bind('connecting', () => { + this.channels.disconnect(); }); - this.connection.bind('disconnected', function () { - _this.channels.disconnect(); + this.connection.bind('disconnected', () => { + this.channels.disconnect(); }); - this.connection.bind('error', function (err) { + this.connection.bind('error', err => { logger.warn(err); }); - Pusher.instances.push(this); - this.timeline.info({ instances: Pusher.instances.length }); - this.user = new user(this); - if (Pusher.isReady) { + pusher_Pusher.instances.push(this); + this.timeline.info({ instances: pusher_Pusher.instances.length }); + this.user = new user_UserFacade(this); + if (pusher_Pusher.isReady) { this.connect(); } } - Pusher.ready = function () { - Pusher.isReady = true; - for (var i = 0, l = Pusher.instances.length; i < l; i++) { - Pusher.instances[i].connect(); - } - }; - Pusher.getClientFeatures = function () { - return keys(filterObject({ ws: worker_runtime.Transports.ws }, function (t) { - return t.isSupported({}); - })); - }; - Pusher.prototype.channel = function (name) { + channel(name) { return this.channels.find(name); - }; - Pusher.prototype.allChannels = function () { + } + allChannels() { return this.channels.all(); - }; - Pusher.prototype.connect = function () { + } + connect() { this.connection.connect(); if (this.timelineSender) { if (!this.timelineSenderTimer) { var usingTLS = this.connection.isUsingTLS(); var timelineSender = this.timelineSender; - this.timelineSenderTimer = new PeriodicTimer(60000, function () { + this.timelineSenderTimer = new timers_PeriodicTimer(60000, function () { timelineSender.send(usingTLS); }); } } - }; - Pusher.prototype.disconnect = function () { + } + disconnect() { this.connection.disconnect(); if (this.timelineSenderTimer) { this.timelineSenderTimer.ensureAborted(); this.timelineSenderTimer = null; } - }; - Pusher.prototype.bind = function (event_name, callback, context) { + } + bind(event_name, callback, context) { this.global_emitter.bind(event_name, callback, context); return this; - }; - Pusher.prototype.unbind = function (event_name, callback, context) { + } + unbind(event_name, callback, context) { this.global_emitter.unbind(event_name, callback, context); return this; - }; - Pusher.prototype.bind_global = function (callback) { + } + bind_global(callback) { this.global_emitter.bind_global(callback); return this; - }; - Pusher.prototype.unbind_global = function (callback) { + } + unbind_global(callback) { this.global_emitter.unbind_global(callback); return this; - }; - Pusher.prototype.unbind_all = function (callback) { + } + unbind_all(callback) { this.global_emitter.unbind_all(); return this; - }; - Pusher.prototype.subscribeAll = function () { + } + subscribeAll() { var channelName; for (channelName in this.channels.channels) { if (this.channels.channels.hasOwnProperty(channelName)) { this.subscribe(channelName); } } - }; - Pusher.prototype.subscribe = function (channel_name) { + } + subscribe(channel_name) { var channel = this.channels.add(channel_name, this); if (channel.subscriptionPending && channel.subscriptionCancelled) { channel.reinstateSubscription(); @@ -4554,8 +4149,8 @@ var pusher_Pusher = (function () { channel.subscribe(); } return channel; - }; - Pusher.prototype.unsubscribe = function (channel_name) { + } + unsubscribe(channel_name) { var channel = this.channels.find(channel_name); if (channel && channel.subscriptionPending) { channel.cancelSubscription(); @@ -4566,25 +4161,24 @@ var pusher_Pusher = (function () { channel.unsubscribe(); } } - }; - Pusher.prototype.send_event = function (event_name, data, channel) { + } + send_event(event_name, data, channel) { return this.connection.send_event(event_name, data, channel); - }; - Pusher.prototype.shouldUseTLS = function () { + } + shouldUseTLS() { return this.config.useTLS; - }; - Pusher.prototype.signin = function () { + } + signin() { this.user.signin(); - }; - Pusher.instances = []; - Pusher.isReady = false; - Pusher.logToConsole = false; - Pusher.Runtime = worker_runtime; - Pusher.ScriptReceivers = worker_runtime.ScriptReceivers; - Pusher.DependenciesReceivers = worker_runtime.DependenciesReceivers; - Pusher.auth_callbacks = worker_runtime.auth_callbacks; - return Pusher; -}()); + } +} +pusher_Pusher.instances = []; +pusher_Pusher.isReady = false; +pusher_Pusher.logToConsole = false; +pusher_Pusher.Runtime = worker_runtime; +pusher_Pusher.ScriptReceivers = worker_runtime.ScriptReceivers; +pusher_Pusher.DependenciesReceivers = worker_runtime.DependenciesReceivers; +pusher_Pusher.auth_callbacks = worker_runtime.auth_callbacks; /* harmony default export */ var core_pusher = __webpack_exports__["default"] = (pusher_Pusher); function checkAppKey(key) { if (key === null || key === undefined) { diff --git a/dist/worker/pusher.worker.js.map b/dist/worker/pusher.worker.js.map index 14fd79823..8079c7def 100644 --- a/dist/worker/pusher.worker.js.map +++ b/dist/worker/pusher.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;AClFA,sCAAsC;AACtC,6CAA6C;;;;;;;;;;;;;;;AAE7C;;GAEG;AAEH,iDAAiD;AACjD,kDAAkD;AAClD,kCAAkC;AAClC,IAAM,YAAY,GAAG,GAAG,CAAC;AAEzB;;;;GAIG;AACH;IACI,kDAAkD;IAElD,eAAoB,iBAAuB;QAAvB,2DAAuB;QAAvB,sBAAiB,GAAjB,iBAAiB,CAAM;IAAI,CAAC;IAEhD,6BAAa,GAAb,UAAc,MAAc;QACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACnC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,sBAAM,GAAN,UAAO,IAAgB;QACnB,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7D,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAC/C;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;aAC/C;iBAAM;gBACH,GAAG,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;aACvC;YACD,GAAG,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;SACvC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,gCAAgB,GAAhB,UAAiB,MAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACnC;QACD,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,6BAAa,GAAb,UAAc,CAAS;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,sBAAM,GAAN,UAAO,CAAS;QACZ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAChB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAChD,IAAM,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;QACxC,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;YAC7B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;YAChB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,EAAE,GAAG,YAAY,CAAC;SAChC;QACD,IAAI,OAAO,KAAK,CAAC,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACrE;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,oCAAoC;IACpC,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,EAAE;IAEF,2CAA2C;IACjC,2BAAW,GAArB,UAAsB,CAAS;QAC3B,qDAAqD;QACrD,EAAE;QACF,wDAAwD;QACxD,qDAAqD;QACrD,uCAAuC;QACvC,EAAE;QACF,0DAA0D;QAC1D,uCAAuC;QACvC,uCAAuC;QACvC,EAAE;QACF,kEAAkE;QAClE,+DAA+D;QAC/D,EAAE;QACF,gEAAgE;QAChE,gEAAgE;QAChE,8BAA8B;QAC9B,EAAE;QACF,2CAA2C;QAC3C,wCAAwC;QACxC,EAAE;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,SAAS;QACT,MAAM,IAAI,EAAE,CAAC;QACb,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEnD,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,yDAAyD;IAC/C,2BAAW,GAArB,UAAsB,CAAS;QAC3B,gEAAgE;QAChE,qEAAqE;QACrE,4DAA4D;QAC5D,aAAa;QACb,EAAE;QACF,yDAAyD;QACzD,gEAAgE;QAChE,4DAA4D;QAC5D,6BAA6B;QAC7B,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,+BAA+B;QAE1D,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,qBAAqB;QACrB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,iCAAiB,GAAzB,UAA0B,CAAS;QAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,EAAE;oBACjC,MAAM;iBACT;gBACD,aAAa,EAAE,CAAC;aACnB;YACD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;aACrD;SACJ;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAEL,YAAC;AAAD,CAAC;AA3LY,sBAAK;AA6LlB,IAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;AAE7B,SAAgB,MAAM,CAAC,IAAgB;IACnC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM,CAAC,CAAS;IAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAFD,wBAEC;AAED;;;;;GAKG;AACH;IAAkC,gCAAK;IAAvC;;IAwCA,CAAC;IAvCG,+DAA+D;IAC/D,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,EAAE;IAEQ,kCAAW,GAArB,UAAsB,CAAS;QAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,SAAS;QACT,MAAM,IAAI,EAAE,CAAC;QACb,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,SAAS;QACT,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEnD,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAES,kCAAW,GAArB,UAAsB,CAAS;QAC3B,IAAI,MAAM,GAAG,YAAY,CAAC;QAE1B,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,8BAA8B;QAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,oBAAoB;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,qBAAqB;QACrB,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,mBAAC;AAAD,CAAC,CAxCiC,KAAK,GAwCtC;AAxCY,oCAAY;AA0CzB,IAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAExC,SAAgB,aAAa,CAAC,IAAgB;IAC1C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAFD,sCAEC;AAED,SAAgB,aAAa,CAAC,CAAS;IACnC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAFD,sCAEC;AAGY,qBAAa,GAAG,UAAC,MAAc;IACxC,eAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAA9B,CAA8B,CAAC;AAEtB,wBAAgB,GAAG,UAAC,MAAc;IAC3C,eAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAAjC,CAAiC,CAAC;AAEzB,qBAAa,GAAG,UAAC,CAAS;IACnC,eAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAAzB,CAAyB,CAAC;;;;;;;;;AC1R9B,sCAAsC;AACtC,6CAA6C;;AAE7C;;GAEG;AAEH,IAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,IAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD;;;GAGG;AACH,SAAgB,MAAM,CAAC,CAAS;IAC5B,qDAAqD;IACrD,2DAA2D;IAC3D,2CAA2C;IAC3C,IAAM,GAAG,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;SAClB;aAAM,IAAI,CAAC,GAAG,KAAK,EAAE;YAClB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;aAAM,IAAI,CAAC,GAAG,MAAM,EAAE;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;aAAM;YACH,CAAC,EAAE,CAAC,CAAC,yBAAyB;YAC9B,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC7B,CAAC,IAAI,OAAO,CAAC;YAEb,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YACrC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SAChC;KACJ;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AA/BD,wBA+BC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,CAAS;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,GAAG,KAAK,EAAE;YAClB,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,GAAG,MAAM,EAAE;YACnB,MAAM,IAAI,CAAC,CAAC;SACf;aAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;aAClC;YACD,CAAC,EAAE,CAAC,CAAC,uBAAuB;YAC5B,MAAM,IAAI,CAAC,CAAC;SACf;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;SAClC;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AArBD,sCAqBC;AAED;;;GAGG;AACH,SAAgB,MAAM,CAAC,GAAe;IAClC,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,IAAI,GAAG,UAAC;YACR,IAAI,CAAC,GAAG,IAAI,EAAE;gBACV,oBAAoB;gBACpB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBACtB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAClC,GAAG,GAAG,IAAI,CAAC;aACd;iBAAM,IAAI,CAAC,GAAG,IAAI,EAAE;gBACjB,qBAAqB;gBACrB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBAC9C,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBACtD,GAAG,GAAG,KAAK,CAAC;aACf;iBAAM,IAAI,CAAC,GAAG,IAAI,EAAE;gBACjB,qBAAqB;gBACrB,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBACtE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC1E,GAAG,GAAG,OAAO,CAAC;aACjB;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,IAAI,OAAO,EAAE;gBACd,kBAAkB;gBAClB,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;iBACjC;gBACD,CAAC,IAAI,OAAO,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAjED,wBAiEC;;;;;;;AC/ID;AACA,iBAAiB,mBAAO,CAAC,CAAU;;;;;;;;;;;;ACDpB,SAAS,MAAM,CAAC,CAAM;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEvC,IAAI,QAAQ,GACV,kEAAkE,CAAC;AACrE,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,KAAK,IAAI,QAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAC,GAAG,CAAC,EAAE,QAAC,EAAE,EAAE;IAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAC,CAAC,CAAC,GAAG,QAAC,CAAC;CAChC;AAED,IAAI,OAAO,GAAG,UAAS,CAAC;IACtB,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,IAAI;QACd,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,EAAE,GAAG,KAAK;YACZ,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YACpE,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,IAAI,IAAI,GAAG,UAAS,CAAC;IACnB,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,IAAI,SAAS,GAAG,UAAS,GAAG;IAC1B,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,GAAG,GACL,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG;QACV,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACrD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;KAC9C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,IAAI,IAAI,GACN,IAAM,CAAC,IAAI;IACX,UAAS,CAAC;QACR,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;;;AC7CJ;IAIE,eACE,GAAc,EACd,KAAgB,EAChB,KAAY,EACZ,QAAuB;QAJzB,iBAYC;QANC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;YACf,IAAI,KAAI,CAAC,KAAK,EAAE;gBACd,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;aACnC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAMD,yBAAS,GAAT;QACE,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7B,CAAC;IAGD,6BAAa,GAAb;QACE,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;IACH,CAAC;IACH,YAAC;AAAD,CAAC;AAEc,wDAAK,EAAC;;;;;;;;;;;;;;;;ACtCgB;AAKrC,SAAS,mBAAY,CAAC,KAAK;IACzB,IAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AACD,SAAS,oBAAa,CAAC,KAAK;IAC1B,IAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAOD;IAAiC,+BAAK;IACpC,qBAAY,KAAY,EAAE,QAAuB;eAC/C,kBAAM,UAAU,EAAE,mBAAY,EAAE,KAAK,EAAE,UAAS,KAAK;YACnD,QAAQ,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC;IACH,kBAAC;AAAD,CAAC,CAPgC,cAAK,GAOrC;;AAOD;IAAmC,iCAAK;IACtC,uBAAY,KAAY,EAAE,QAAuB;eAC/C,kBAAM,WAAW,EAAE,oBAAa,EAAE,KAAK,EAAE,UAAS,KAAK;YACrD,QAAQ,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IACH,oBAAC;AAAD,CAAC,CAPkC,cAAK,GAOvC;;;;ACpC2D;AAE5D,IAAI,IAAI,GAAG;IACT,GAAG,EAAH;QACE,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;SAC7B;IACH,CAAC;IAED,KAAK,EAAL,UAAM,QAAuB;QAC3B,OAAO,IAAI,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAUD,MAAM,EAAN,UAAO,IAAY;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACjC,IAAI,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,UAAS,MAAM;YACpB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC;IACJ,CAAC;CACF,CAAC;AAEa,6CAAI,EAAC;;;ACjCiB;AACV;AAgBpB,SAAS,MAAM,CAAI,MAAW;IAAE,iBAAiB;SAAjB,UAAiB,EAAjB,qBAAiB,EAAjB,IAAiB;QAAjB,gCAAiB;;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;YAC/B,IACE,UAAU,CAAC,QAAQ,CAAC;gBACpB,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW;gBAChC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,KAAK,MAAM,EAC3C;gBACA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzE;iBAAM;gBACL,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;aACzC;SACF;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,SAAS,SAAS;IACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB;aAAM;YACL,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;IACD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAEM,SAAS,YAAY,CAAC,KAAY,EAAE,IAAS;IAElD,IAAI,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,CAAC,CAAC,CAAC;KACX;IACD,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa,EAAE;QACpD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YACrB,OAAO,CAAC,CAAC;SACV;KACF;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAYM,SAAS,WAAW,CAAC,MAAW,EAAE,CAAW;IAClD,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YACrD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;SAC7B;KACF;AACH,CAAC;AAOM,SAAS,IAAI,CAAC,MAAW;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,WAAW,CAAC,MAAM,EAAE,UAAS,CAAC,EAAE,GAAG;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAOM,SAAS,MAAM,CAAC,MAAW;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAYM,SAAS,KAAK,CAAC,KAAY,EAAE,CAAW,EAAE,OAAa;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/C;AACH,CAAC;AAaM,SAAS,GAAG,CAAC,KAAY,EAAE,CAAW;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;KAC5C;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,SAAS,CAAC,MAAW,EAAE,CAAW;IAChD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,MAAM,CAAC,KAAY,EAAE,IAAc;IACjD,IAAI;QACF,IAAI;YACJ,UAAS,KAAK;gBACZ,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC,CAAC;IAEJ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAaM,SAAS,YAAY,CAAC,MAAc,EAAE,IAAc;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAOM,SAAS,OAAO,CAAC,MAAc;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,MAAM,EAAE,UAAS,KAAK,EAAE,GAAG;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAYM,SAAS,GAAG,CAAC,KAAY,EAAE,IAAc;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAYM,SAAS,eAAG,CAAC,KAAY,EAAE,IAAc;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;YAC7B,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,SAAS,kBAAkB,CAAC,IAAI;IACrC,OAAO,SAAS,CAAC,IAAI,EAAE,UAAS,KAAK;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAClC;QACD,OAAO,kBAAkB,CAAC,MAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,SAAS,gBAAgB,CAAC,IAAS;IACxC,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAS,KAAK;QAC5C,OAAO,KAAK,KAAK,SAAS,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,GAAG,CACb,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AACf,CAAC;AAWM,SAAS,aAAa,CAAC,MAAW;IACvC,IAAI,OAAO,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,CAAC;IAEb,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,IAAI;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAEhB,QAAQ,OAAO,KAAK,EAAE;YACpB,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC;iBACb;gBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3B;iBACF;gBAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEjB,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,gBAAgB,EAAE;oBAC/D,EAAE,GAAG,EAAE,CAAC;oBACR,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;wBACpC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;qBAC/C;iBACF;qBAAM;oBACL,EAAE,GAAG,EAAE,CAAC;oBACR,KAAK,IAAI,IAAI,KAAK,EAAE;wBAClB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;4BACrD,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,EACX,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CACxC,CAAC;yBACH;qBACF;iBACF;gBACD,OAAO,EAAE,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;SAChB;IACH,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC;AAUM,SAAS,iBAAiB,CAAC,MAAW;IAC3C,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;KAC9C;AACH,CAAC;;;AClUD,IAAI,QAAQ,GAAkB;IAC5B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,EAAE;IAEV,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,SAAS;IAEnB,UAAU,EAAE,kBAAkB;IAE9B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE;QAClB,QAAQ,EAAE,mBAAmB;QAC7B,SAAS,EAAE,MAAM;KAClB;IACD,oBAAoB,EAAE;QACpB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,MAAM;KAClB;IAGD,QAAQ,EAAE,sBAAQ;IAClB,SAAS,EAAE,uBAAS;IACpB,iBAAiB,EAAE,EAAiB;CACrC,CAAC;AAEa,qDAAQ,EAAC;;;ACjEW;AAGnC,SAAS,aAAa,CACpB,UAAkB,EAClB,MAAuB,EACvB,IAAY;IAEZ,IAAI,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAC9D,OAAO,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,WAAoB;IACvD,IAAI,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IACzB,IAAI,KAAK,GACP,YAAY;QACZ,QAAQ,CAAC,QAAQ;QACjB,YAAY;QACZ,WAAW;QACX,QAAQ,CAAC,OAAO;QAChB,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,IAAI,GAAG,KAAK,CAAC;AACtB,CAAC;AAEM,IAAI,EAAE,GAAc;IACzB,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACxE,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEK,IAAI,IAAI,GAAc;IAC3B,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEK,IAAI,MAAM,GAAc;IAC7B,UAAU,EAAE,UAAS,GAAW,EAAE,MAAuB;QACvD,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,UAAS,GAAW,EAAE,MAAuB;QACpD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;;;AC7CkD;AAGpD;IAGE;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,8BAAG,GAAH,UAAI,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,8BAAG,GAAH,UAAI,IAAY,EAAE,QAAkB,EAAE,OAAY;QAChD,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;YACtC,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,iCAAM,GAAN,UAAO,IAAa,EAAE,QAAmB,EAAE,OAAa;QACtD,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,QAAQ,IAAI,OAAO,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC/C;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAChC;IACH,CAAC;IAEO,yCAAc,GAAtB,UAAuB,KAAe,EAAE,QAAkB,EAAE,OAAY;QACtE,KAAiB,CACf,KAAK,EACL,UAAS,IAAI;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAkB,CACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAC3B,UAAS,OAAO;gBACd,OAAO,CACL,CAAC,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;oBACrC,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CACzC,CAAC;YACJ,CAAC,CACF,CAAC;YACF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC9B;QACH,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,6CAAkB,GAA1B,UAA2B,KAAe;QACxC,KAAiB,CACf,KAAK,EACL,UAAS,IAAI;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IACH,uBAAC;AAAD,CAAC;;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,GAAG,GAAG,IAAI,CAAC;AACpB,CAAC;;;AC1EmD;AAGD;AAMnD;IAKE,oBAAY,WAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,yBAAI,GAAJ,UAAK,SAAiB,EAAE,QAAkB,EAAE,OAAa;QACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAW,GAAX,UAAY,QAAkB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAAM,GAAN,UAAO,SAAkB,EAAE,QAAmB,EAAE,OAAa;QAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAa,GAAb,UAAc,QAAmB;QAC/B,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,gBAAgB,GAAG,MAAkB,CACxC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAC3B,WAAC,IAAI,QAAC,KAAK,QAAQ,EAAd,CAAc,CACpB,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+BAAU,GAAV;QACE,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAI,GAAJ,UAAK,SAAiB,EAAE,IAAU,EAAE,QAAmB;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC3C;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,QAAQ,EAAE;YAGZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC3B;aAAM,IAAI,IAAI,EAAE;YAGf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAM,EAAE,IAAI,CAAC,CAAC;aAC7D;SACF;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACnC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IACH,iBAAC;AAAD,CAAC;;;;ACnF+C;AAClB;AAE9B;IAAA;QAaU,cAAS,GAAG,UAAC,OAAe;YAClC,IAAI,IAAM,CAAC,OAAO,IAAI,IAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBACxC,IAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC;IA8BJ,CAAC;IA9CC,sBAAK,GAAL;QAAM,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,qBAAI,GAAJ;QAAK,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,sBAAK,GAAL;QAAM,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAQO,8BAAa,GAArB,UAAsB,OAAe;QACnC,IAAI,IAAM,CAAC,OAAO,IAAI,IAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YACzC,IAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB;IACH,CAAC;IAEO,+BAAc,GAAtB,UAAuB,OAAe;QACpC,IAAI,IAAM,CAAC,OAAO,IAAI,IAAM,CAAC,OAAO,CAAC,KAAK,EAAE;YAC1C,IAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC7B;IACH,CAAC;IAEO,oBAAG,GAAX,UACE,sBAAiD;QACjD,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QAEd,IAAI,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,WAAM,CAAC,GAAG,EAAE;YACd,WAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACrB;aAAM,IAAI,WAAM,CAAC,YAAY,EAAE;YAC9B,IAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,GAAG,CAAC,OAAO,CAAC,CAAC;SACd;IACH,CAAC;IACH,aAAC;AAAD,CAAC;AAEc,+CAAI,aAAM,EAAE,EAAC;;;;;;;;;;;;;;;;ACpDD;AACyB;AACe;AACpC;AAGD;AAgC9B;IAAiD,0DAAgB;IAc/D,6BACE,KAAqB,EACrB,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAmC;QALrC,YAOE,iBAAO,SAYR;QAXC,KAAI,CAAC,UAAU,GAAG,cAAO,CAAC,8BAA8B,CAAC;QACzD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,KAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,KAAI,CAAC,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;;IAC7C,CAAC;IAMD,mDAAqB,GAArB;QACE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,CAAC;IAMD,0CAAY,GAAZ;QACE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAMD,qCAAO,GAAP;QAAA,iBAqBC;QApBC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI;YACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACvD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,KAAK,CAAC;gBACT,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,OAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,mCAAK,GAAL;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAOD,kCAAI,GAAJ,UAAK,IAAS;QAAd,iBAYC;QAXC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;YAEzB,IAAI,CAAC,KAAK,CAAC;gBACT,IAAI,KAAI,CAAC,MAAM,EAAE;oBACf,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxB;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,kCAAI,GAAJ;QACE,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACpB;IACH,CAAC;IAEO,oCAAM,GAAd;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CACnB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAChD,CAAC;SACH;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IACjC,CAAC;IAEO,qCAAO,GAAf,UAAgB,KAAK;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,qCAAO,GAAf,UAAgB,UAAgB;QAC9B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;gBACzB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAEO,uCAAS,GAAjB,UAAkB,OAAO;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,wCAAU,GAAlB;QACE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAEO,2CAAa,GAArB;QAAA,iBAmBC;QAlBC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG;YACnB,KAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,eAAK;YACzB,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,oBAAU;YAC9B,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAO;YAC7B,KAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;gBACvB,KAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC;SACH;IACH,CAAC;IAEO,6CAAe,GAAvB;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;YAClC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;aACpC;SACF;IACH,CAAC;IAEO,yCAAW,GAAnB,UAAoB,KAAa,EAAE,MAAY;QAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,oBAAoB,CAAC;YACxB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CACH,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,kDAAoB,GAApB,UAAqB,OAAO;QAC1B,OAAO,MAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IACH,0BAAC;AAAD,CAAC,CA1MgD,UAAgB,GA0MhE;;;;AC9OwD;AAmBzD;IAGE,mBAAY,KAAqB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAOD,+BAAW,GAAX,UAAY,WAAgB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAUD,oCAAgB,GAAhB,UACE,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAY;QAEZ,OAAO,IAAI,oBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IACH,gBAAC;AAAD,CAAC;;;;ACrDyD;AAER;AAEI;AAGxB;AAO9B,IAAI,WAAW,GAAG,IAAI,oBAAS,CAAiB;IAC9C,IAAI,EAAE,EAAa;IACnB,qBAAqB,EAAE,KAAK;IAC5B,YAAY,EAAE,KAAK;IAEnB,aAAa,EAAE;QACb,OAAO,OAAO,CAAC,cAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,WAAW,EAAE;QACX,OAAO,OAAO,CAAC,cAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,cAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF,CAAC,CAAC;AAEH,IAAI,iBAAiB,GAAG;IACtB,IAAI,EAAE,IAAe;IACrB,qBAAqB,EAAE,KAAK;IAC5B,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE;QACb,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEK,IAAI,sBAAsB,GAAG,MAAkB,CACpD;IACE,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,cAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;CACF,EACD,iBAAiB,CAClB,CAAC;AACK,IAAI,oBAAoB,GAAG,MAAkB,CAClD;IACE,SAAS,EAAE,UAAS,GAAG;QACrB,OAAO,cAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;CACF,EACD,iBAAiB,CAClB,CAAC;AAEF,IAAI,gBAAgB,GAAG;IACrB,WAAW,EAAE;QACX,OAAO,cAAO,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;CACF,CAAC;AAGF,IAAI,qBAAqB,GAAG,IAAI,oBAAS,CACvB,CACd,MAAkB,CAAC,EAAE,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CACjE,CACF,CAAC;AAGF,IAAI,mBAAmB,GAAG,IAAI,oBAAS,CACrB,MAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAC/E,CAAC;AAEF,IAAI,UAAU,GAAoB;IAChC,EAAE,EAAE,WAAW;IACf,aAAa,EAAE,qBAAqB;IACpC,WAAW,EAAE,mBAAmB;CACjC,CAAC;AAEa,yDAAU,EAAC;;;AChFC;AACyB;AAmBpD;IAOE,wCACE,OAAyB,EACzB,SAAoB,EACpB,OAAyB;QAEzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAYD,yDAAgB,GAAhB,UACE,IAAY,EACZ,QAAgB,EAChB,GAAW,EACX,OAAe;QAJjB,iBAyCC;QAnCC,OAAO,GAAG,MAAkB,CAAC,EAAE,EAAE,OAAO,EAAE;YACxC,eAAe,EAAE,IAAI,CAAC,SAAS;SAChC,CAAC,CAAC;QACH,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC9C,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,OAAO,CACR,CAAC;QAEF,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,GAAG;YACX,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG,oBAAU;YACvB,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtC,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;gBAExD,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;aAC5B;iBAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,aAAa,EAAE;gBAEhD,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;gBAC1C,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAI,CAAC,YAAY,EAAE;oBACpC,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC3B,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,KAAI,CAAC,YAAY,CAAC,CAAC;iBAC5D;aACF;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;IAUD,oDAAW,GAAX,UAAY,WAAmB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC3E,CAAC;IACH,qCAAC;AAAD,CAAC;;;;ACjGD,IAAM,QAAQ,GAAG;IAgBf,aAAa,EAAE,UAAS,YAA0B;QAChD,IAAI;YACF,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;gBACvC,IAAI;oBACF,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAChD;gBAAC,OAAO,CAAC,EAAE,GAAE;aACf;YACD,IAAI,WAAW,GAAgB;gBAC7B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,eAAe;aACtB,CAAC;YACF,IAAI,WAAW,CAAC,OAAO,EAAE;gBACvB,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;aAC3C;YACD,OAAO,WAAW,CAAC;SACpB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;SACxE;IACH,CAAC;IAQD,aAAa,EAAE,UAAS,KAAkB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAgBD,gBAAgB,EAAE,UAAS,YAA0B;QACnD,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,KAAK,KAAK,+BAA+B,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAClC,MAAM,4CAA4C,CAAC;aACpD;YACD,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;gBAC1B,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI;aACtD,CAAC;SACH;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE;YAG3C,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;aACxC,CAAC;SACH;aAAM;YACL,MAAM,mBAAmB,CAAC;SAC3B;IACH,CAAC;IAYD,cAAc,EAAE,UAAS,UAAU;QACjC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YAM1B,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtD,OAAO,SAAS,CAAC;aAClB;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;SACF;aAAM,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;YACnC,OAAO,UAAU,CAAC;SACnB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE;YACjC,OAAO,OAAO,CAAC;SAChB;aAAM;YAEL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAWD,aAAa,EAAE,UAAS,UAAU;QAChC,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;YACxD,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE;oBACJ,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO;iBACjD;aACF,CAAC;SACH;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;CACF,CAAC;AAEa,qDAAQ,EAAC;;;;;;;;;;;;;;;;ACzJ4B;AACe;AACxB;AAEZ;AAmB/B;IAAwC,uCAAgB;IAKtD,oBAAY,EAAU,EAAE,SAA8B;QAAtD,YACE,iBAAO,SAKR;QAJC,KAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;QACjD,KAAI,CAAC,aAAa,EAAE,CAAC;;IACvB,CAAC;IAMD,0CAAqB,GAArB;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAChD,CAAC;IAMD,yBAAI,GAAJ,UAAK,IAAS;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IASD,+BAAU,GAAV,UAAW,IAAY,EAAE,IAAS,EAAE,OAAgB;QAClD,IAAI,KAAK,GAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,OAAO,EAAE;YACX,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SACzB;QACD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAOD,yBAAI,GAAJ;QACE,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;SACpC;IACH,CAAC;IAGD,0BAAK,GAAL;QACE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,kCAAa,GAArB;QAAA,iBA6DC;QA5DC,IAAI,SAAS,GAAG;YACd,OAAO,EAAE,UAAC,YAA0B;gBAClC,IAAI,WAAW,CAAC;gBAChB,IAAI;oBACF,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;iBACpD;gBAAC,OAAO,CAAC,EAAE;oBACV,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACjB,IAAI,EAAE,mBAAmB;wBACzB,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,YAAY,CAAC,IAAI;qBACxB,CAAC,CAAC;iBACJ;gBAED,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAExC,QAAQ,WAAW,CAAC,KAAK,EAAE;wBACzB,KAAK,cAAc;4BACjB,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gCACjB,IAAI,EAAE,aAAa;gCACnB,IAAI,EAAE,WAAW,CAAC,IAAI;6BACvB,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,aAAa;4BAChB,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAClB,MAAM;wBACR,KAAK,aAAa;4BAChB,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAClB,MAAM;qBACT;oBACD,KAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;iBACnC;YACH,CAAC;YACD,QAAQ,EAAE;gBACR,KAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,KAAK,EAAE,eAAK;gBACV,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,oBAAU;gBAChB,eAAe,EAAE,CAAC;gBAElB,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;oBACjC,KAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;iBACnC;gBAED,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,KAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;SACF,CAAC;QAEF,IAAI,eAAe,GAAG;YACpB,WAAuB,CAAC,SAAS,EAAE,UAAC,QAAQ,EAAE,KAAK;gBACjD,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,WAAuB,CAAC,SAAS,EAAE,UAAC,QAAQ,EAAE,KAAK;YACjD,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qCAAgB,GAAxB,UAAyB,UAAe;QACtC,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC3B;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACrD;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,CAxIuC,UAAgB,GAwIvD;;;;AC9JsD;AACX;AACL;AAoBvC;IAME,mBACE,SAA8B,EAC9B,QAAoC;QAEpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,yBAAK,GAAL;QACE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,iCAAa,GAArB;QAAA,iBAkCC;QAjCC,IAAI,CAAC,SAAS,GAAG,WAAC;YAChB,KAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,MAAM,CAAC;YACX,IAAI;gBACF,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACvC;YAAC,OAAO,CAAC,EAAE;gBACV,KAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnC,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACvB,OAAO;aACR;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;gBACjC,KAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvB,UAAU,EAAE,IAAI,qBAAU,CAAC,MAAM,CAAC,EAAE,EAAE,KAAI,CAAC,SAAS,CAAC;oBACrD,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC,CAAC;aACJ;iBAAM;gBACL,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpD,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;aACxB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,oBAAU;YACxB,KAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;YAC9D,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/C,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEO,mCAAe,GAAvB;QACE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAEO,0BAAM,GAAd,UAAe,MAAc,EAAE,MAAW;QACxC,IAAI,CAAC,QAAQ,CACX,MAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAC1E,CAAC;IACJ,CAAC;IACH,gBAAC;AAAD,CAAC;;;;ACrF6B;AAQ9B;IAKE,wBAAY,QAAkB,EAAE,OAA8B;QAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,6BAAI,GAAJ,UAAK,MAAe,EAAE,QAAmB;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC3B,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,cAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAChD,QAAQ,CACT,CAAC;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;AC9BD;IAAkC,qCAAK;IACrC,sBAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,mBAAC;AAAD,CAAC,CANiC,KAAK,GAMtC;;AAED;IAAoC,uCAAK;IACvC,wBAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,qBAAC;AAAD,CAAC,CANmC,KAAK,GAMxC;;AAED;IAAqC,wCAAK;IACxC,yBAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,sBAAC;AAAD,CAAC,CANoC,KAAK,GAMzC;;AACD;IAA6C,gDAAK;IAChD,iCAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,8BAAC;AAAD,CAAC,CAN4C,KAAK,GAMjD;;AACD;IAAqC,wCAAK;IACxC,yBAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,sBAAC;AAAD,CAAC,CANoC,KAAK,GAMzC;;AACD;IAAwC,2CAAK;IAC3C,4BAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,yBAAC;AAAD,CAAC,CANuC,KAAK,GAM5C;;AACD;IAA0C,6CAAK;IAC7C,8BAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,2BAAC;AAAD,CAAC,CANyC,KAAK,GAM9C;;AACD;IAAyC,4CAAK;IAC5C,6BAAY,GAAY;;QAAxB,YACE,kBAAM,GAAG,CAAC,SAGX;QADC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,0BAAC;AAAD,CAAC,CANwC,KAAK,GAM7C;;AACD;IAAmC,sCAAK;IAEtC,uBAAY,MAAc,EAAE,GAAY;;QAAxC,YACE,kBAAM,GAAG,CAAC,SAIX;QAHC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,WAAW,SAAS,CAAC,CAAC;;IACpD,CAAC;IACH,oBAAC;AAAD,CAAC,CARkC,KAAK,GAQvC;;;;AChED,IAAM,QAAQ,GAAG;IACf,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE;QACJ,sBAAsB,EAAE;YACtB,IAAI,EAAE,gDAAgD;SACvD;QACD,qBAAqB,EAAE;YACrB,IAAI,EAAE,8CAA8C;SACrD;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,8BAA8B;SACrC;QACD,sBAAsB,EAAE;YACtB,IAAI,EAAE,qDAAqD;SAC5D;QACD,uBAAuB,EAAE;YACvB,OAAO,EACL,6GAA6G;SAChH;KACF;CACF,CAAC;AAOF,IAAM,cAAc,GAAG,UAAS,GAAW;IACzC,IAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,CAAC,OAAO,EAAE;QAClB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;KACtB;SAAM,IAAI,MAAM,CAAC,IAAI,EAAE;QACtB,GAAG,GAAG,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;KACtC;IAED,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAU,SAAS,SAAI,GAAK,CAAC;AAC/B,CAAC,CAAC;AAEa,gDAAE,cAAc,kBAAE,EAAC;;;;;;;;;;;;;;;;AC/CiC;AAC/B;AACL;AAIW;AAKA;AAW1C;IAAqC,iCAAgB;IAQnD,iBAAY,IAAY,EAAE,MAAc;QAAxC,YACE,kBAAM,UAAS,KAAK,EAAE,IAAI;YACxB,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,SAOH;QALC,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,KAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;;IACrC,CAAC;IAMD,2BAAS,GAAT,UAAU,QAAgB,EAAE,QAAsC;QAChE,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAGD,yBAAO,GAAP,UAAQ,KAAa,EAAE,IAAS;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAClC,MAAM,IAAI,YAAmB,CAC3B,SAAS,GAAG,KAAK,GAAG,iCAAiC,CACtD,CAAC;SACH;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,CACT,4EAA0E,MAAQ,CACnF,CAAC;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAGD,4BAAU,GAAV;QACE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IAMD,6BAAW,GAAX,UAAY,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,wCAAwC,EAAE;YAC1D,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;SAC9C;aAAM,IAAI,SAAS,KAAK,oCAAoC,EAAE;YAC7D,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;SAC1C;aAAM,IAAI,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YACtD,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;IACH,CAAC;IAED,kDAAgC,GAAhC,UAAiC,KAAkB;QACjD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACxD;IACH,CAAC;IAED,8CAA4B,GAA5B,UAA6B,KAAkB;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;SACxD;QAED,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAGD,2BAAS,GAAT;QAAA,iBAmCC;QAlCC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAChC,UAAC,KAAmB,EAAE,IAA8B;YAClD,IAAI,KAAK,EAAE;gBACT,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBAIjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/B,KAAI,CAAC,IAAI,CACP,2BAA2B,EAC3B,MAAM,CAAC,MAAM,CACX,EAAE,EACF;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,EACD,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/D,CACF,CAAC;aACH;iBAAM;gBACL,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE;oBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,OAAO,EAAE,KAAI,CAAC,IAAI;iBACnB,CAAC,CAAC;aACJ;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAGD,6BAAW,GAAX;QACE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE;YAC3C,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAGD,oCAAkB,GAAlB;QACE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACpC,CAAC;IAGD,uCAAqB,GAArB;QACE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IACH,cAAC;AAAD,CAAC,CA5IoC,UAAgB,GA4IpD;;;;;;;;;;;;;;;;;ACjK+B;AAQhC;IAA4C,gDAAO;IAAnD;;IAeA,CAAC;IATC,kCAAS,GAAT,UAAU,QAAgB,EAAE,QAAsC;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CACzC;YACE,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,QAAQ,EAAE,QAAQ;SACnB,EACD,QAAQ,CACT,CAAC;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC,CAf2C,gBAAO,GAelD;;;;ACxBmD;AAGpD;IAME;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IASD,qBAAG,GAAH,UAAI,EAAU;QACZ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;YAC1D,OAAO;gBACL,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;aACvB,CAAC;SACH;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAMD,sBAAI,GAAJ,UAAK,QAAkB;QAAvB,iBAIC;QAHC,WAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAC,MAAM,EAAE,EAAE;YAC/C,QAAQ,CAAC,KAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,yBAAO,GAAP,UAAQ,EAAU;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAGD,gCAAc,GAAd,UAAe,gBAAqB;QAClC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAGD,2BAAS,GAAT,UAAU,UAAe;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAGD,8BAAY,GAAZ,UAAa,UAAe;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,uBAAK,GAAL;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;IACH,cAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/E8C;AAChB;AACC;AAEY;AAK5C;IAA6C,kDAAc;IAQzD,yBAAY,IAAY,EAAE,MAAc;QAAxC,YACE,kBAAM,IAAI,EAAE,MAAM,CAAC,SAEpB;QADC,KAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;;IAC/B,CAAC;IAOD,mCAAS,GAAT,UAAU,QAAgB,EAAE,QAAkB;QAA9C,iBA2BC;QA1BC,iBAAM,SAAS,YAAC,QAAQ,EAAE,UAAO,KAAK,EAAE,QAAQ;;;;;6BAC1C,CAAC,KAAK,EAAN,cAAM;wBACR,QAAQ,GAAG,QAAoC,CAAC;6BAC5C,SAAQ,CAAC,YAAY,IAAI,IAAI,GAA7B,cAA6B;wBAC3B,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;wBACpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;4BAE1C,WAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB;;wBAAxC,SAAwC,CAAC;wBACzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;4BAGtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;yBACrD;6BAAM;4BACD,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;4BAC9D,MAAM,CAAC,KAAK,CACV,wCAAsC,IAAI,CAAC,IAAI,QAAK;iCAClD,oCAAkC,MAAM,OAAI;gCAC5C,kCAAkC,CACrC,CAAC;4BACF,QAAQ,CAAC,uBAAuB,CAAC,CAAC;4BAClC,WAAO;yBACR;;;wBAGL,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;;;aAC3B,CAAC,CAAC;IACL,CAAC;IAMD,qCAAW,GAAX,UAAY,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC/C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;aAClC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;IACH,CAAC;IACD,6CAAmB,GAAnB,UAAoB,KAAkB;QACpC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,QAAQ,SAAS,EAAE;YACjB,KAAK,wCAAwC;gBAC3C,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,oCAAoC;gBACvC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,8BAA8B;gBACjC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,gCAAgC;gBACnC,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;iBACnD;gBACD,MAAM;SACT;IACH,CAAC;IAED,0DAAgC,GAAhC,UAAiC,KAAkB;QACjD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC1D;IACH,CAAC;IAGD,oCAAU,GAAV;QACE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,iBAAM,UAAU,WAAE,CAAC;IACrB,CAAC;IACH,sBAAC;AAAD,CAAC,CAvG4C,eAAc,GAuG1D;;;;;;;;;;;;;;;;;;;;;;;AChH8C;AACX;AACL;AAEwB;AACI;AAc3D;IAA8C,oDAAc;IAI1D,0BAAY,IAAY,EAAE,MAAc,EAAE,IAAU;QAApD,YACE,kBAAM,IAAI,EAAE,MAAM,CAAC,SAEpB;QAND,SAAG,GAAe,IAAI,CAAC;QAKrB,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;IACnB,CAAC;IAOD,oCAAS,GAAT,UAAU,QAAgB,EAAE,QAAsC;QAAlE,iBAuBC;QAtBC,iBAAM,SAAS,YACb,QAAQ,EACR,UAAC,KAAmB,EAAE,QAAkC;YACtD,IAAI,KAAK,EAAE;gBACT,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC1B,OAAO;aACR;YACD,IAAI,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,EAAE;gBACjB,QAAQ,CACN,IAAI,KAAK,CACP,iEAA+D,KAAI,CAAC,IAAM,CAC3E,EACD,IAAI,CACL,CAAC;gBACF,OAAO;aACR;YACD,KAAI,CAAC,GAAG,GAAG,wBAAY,CAAC,YAAY,CAAC,CAAC;YACtC,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,kCAAO,GAAP,UAAQ,KAAa,EAAE,IAAS;QAC9B,MAAM,IAAI,kBAAyB,CACjC,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAMD,sCAAW,GAAX,UAAY,KAAkB;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IACE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAC3C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAClC;YACA,iBAAM,WAAW,YAAC,KAAK,CAAC,CAAC;YACzB,OAAO;SACR;QACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,+CAAoB,GAA5B,UAA6B,KAAa,EAAE,IAAS;QAArD,iBAwDC;QAvDC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,KAAK,CACV,8EAA8E,CAC/E,CAAC;YACF,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnC,MAAM,CAAC,KAAK,CACV,oGAAoG;gBAClG,IAAI,CACP,CAAC;YACF,OAAO;SACR;QACD,IAAI,UAAU,GAAG,wBAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC1D,MAAM,CAAC,KAAK,CACV,sDAAoD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,eAAU,UAAU,CAAC,MAAQ,CACpH,CAAC;YACF,OAAO;SACR;QACD,IAAI,KAAK,GAAG,wBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAClD,MAAM,CAAC,KAAK,CACV,iDAA+C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,eAAU,KAAK,CAAC,MAAQ,CACvG,CAAC;YACF,OAAO;SACR;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,KAAK,CACV,iIAAiI,CAClI,CAAC;YAGF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAC,KAAK,EAAE,QAAQ;gBAC/D,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAK,CACV,mDAAiD,QAAQ,2DAAwD,CAClH,CAAC;oBACF,OAAO;iBACR;gBACD,KAAK,GAAG,KAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAI,CAAC,GAAG,CAAC,CAAC;gBAC9D,IAAI,KAAK,KAAK,IAAI,EAAE;oBAClB,MAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;oBACF,OAAO;iBACR;gBACD,KAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC,CAAC,CAAC;YACH,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAID,wCAAa,GAAb,UAAc,KAAiB;QAC7B,IAAI,GAAG,GAAG,sBAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QAAC,WAAM;YACN,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,CAlI6C,eAAc,GAkI3D;;;;;;;;;;;;;;;;;ACrJkE;AACZ;AAExB;AAKqB;AAGtB;AAmC9B;IAA+C,sDAAgB;IAkB7D,2BAAY,GAAW,EAAE,OAAiC;QAA1D,YACE,iBAAO,SA+BR;QA9BC,KAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAC3B,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtC,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAEpC,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,mBAAmB,EAAE,CAAC;QACjD,KAAI,CAAC,mBAAmB,GAAG,KAAI,CAAC,wBAAwB,CACtD,KAAI,CAAC,cAAc,CACpB,CAAC;QACF,KAAI,CAAC,kBAAkB,GAAG,KAAI,CAAC,uBAAuB,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC;QAE5E,IAAI,OAAO,GAAG,cAAO,CAAC,UAAU,EAAE,CAAC;QAEnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YACrB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,IAAI,KAAI,CAAC,KAAK,KAAK,YAAY,IAAI,KAAI,CAAC,KAAK,KAAK,aAAa,EAAE;gBAC/D,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACjB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;YACtB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3C,IAAI,KAAI,CAAC,UAAU,EAAE;gBACnB,KAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,cAAc,EAAE,CAAC;;IACxB,CAAC;IAOD,mCAAO,GAAP;QACE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;YAClC,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;YAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO;SACR;QACD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAMD,gCAAI,GAAJ,UAAK,IAAI;QACP,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnC;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IASD,sCAAU,GAAV,UAAW,IAAY,EAAE,IAAS,EAAE,OAAgB;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACxD;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,sCAAU,GAAV;QACE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAED,sCAAU,GAAV;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,2CAAe,GAAvB;QAAA,iBAkBC;QAjBC,IAAI,QAAQ,GAAG,UAAC,KAAK,EAAE,SAAS;YAC9B,IAAI,KAAK,EAAE;gBACT,KAAI,CAAC,MAAM,GAAG,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;aAClD;iBAAM;gBACL,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,EAAE;oBAChC,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACjB,IAAI,EAAE,gBAAgB;wBACtB,KAAK,EAAE,SAAS,CAAC,KAAK;qBACvB,CAAC,CAAC;oBACH,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC1D;qBAAM;oBACL,KAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,KAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;iBACtD;aACF;QACH,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEO,2CAAe,GAAvB;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;IAEO,gDAAoB,GAA5B;QACE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,UAAU,CAAC,KAAK,EAAE,CAAC;SACpB;IACH,CAAC;IAEO,0CAAc,GAAtB;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IAEO,mCAAO,GAAf,UAAgB,KAAK;QAArB,iBASC;QARC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;SACtD;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,WAAK,CAAC,KAAK,IAAI,CAAC,EAAE;YACtC,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,KAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,2CAAe,GAAvB;QACE,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;IACH,CAAC;IAEO,+CAAmB,GAA3B;QAAA,iBAIC;QAHC,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;YACjE,KAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iDAAqB,GAA7B;QACE,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;SACvC;IACH,CAAC;IAEO,6CAAiB,GAAzB;QAAA,iBAQC;QAPC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,aAAa,GAAG,IAAI,WAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACvD,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,8CAAkB,GAA1B;QAAA,iBAQC;QAPC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,EAAE;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,WAAK,CAAC,IAAI,CAAC,eAAe,EAAE;gBACnD,KAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,6CAAiB,GAAzB;QACE,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;SACpC;IACH,CAAC;IAEO,oDAAwB,GAAhC,UACE,cAA8B;QADhC,iBA0BC;QAvBC,OAAO,MAAkB,CAAsB,EAAE,EAAE,cAAc,EAAE;YACjE,OAAO,EAAE,iBAAO;gBAEd,KAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,KAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,EAAE;gBACJ,KAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,QAAQ,EAAE;gBACR,KAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,eAAK;gBAEV,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE;gBACN,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,KAAI,CAAC,WAAW,EAAE,EAAE;oBACtB,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACpB;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,mDAAuB,GAA/B,UACE,cAA8B;QADhC,iBAgBC;QAbC,OAAO,MAAkB,CAAqB,EAAE,EAAE,cAAc,EAAE;YAChE,SAAS,EAAE,UAAC,SAA2B;gBACrC,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAC7B,KAAI,CAAC,OAAO,CAAC,eAAe,EAC5B,SAAS,CAAC,eAAe,EACzB,SAAS,CAAC,UAAU,CAAC,eAAe,IAAI,QAAQ,CACjD,CAAC;gBACF,KAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACzC,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,KAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,+CAAmB,GAA3B;QAAA,iBA0BC;QAzBC,IAAI,gBAAgB,GAAG,kBAAQ;YAC7B,OAAO,UAAC,MAAiC;gBACvC,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;iBACrE;gBACD,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,gBAAgB,CAAC;gBACzB,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,KAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,OAAO,EAAE,gBAAgB,CAAC;gBACxB,KAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC;YACF,OAAO,EAAE,gBAAgB,CAAC;gBACxB,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC;YACF,KAAK,EAAE,gBAAgB,CAAC;gBACtB,KAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAEO,yCAAa,GAArB,UAAsB,UAAU;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;SAC9D;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,6CAAiB,GAAzB;QACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;SAChE;QACD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,uCAAW,GAAnB,UAAoB,QAAgB,EAAE,IAAU;QAC9C,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,aAAa,KAAK,QAAQ,EAAE;YAC9B,IAAI,mBAAmB,GAAG,QAAQ,CAAC;YACnC,IAAI,mBAAmB,KAAK,WAAW,EAAE;gBACvC,mBAAmB,IAAI,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;aAChE;YACD,MAAM,CAAC,KAAK,CACV,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,mBAAmB,CAC7C,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3B;IACH,CAAC;IAEO,uCAAW,GAAnB;QACE,OAAO,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IACnE,CAAC;IACH,wBAAC;AAAD,CAAC,CApU8C,UAAgB,GAoU9D;;;;ACjXmD;AAEb;AAGH;AACM;AAG1C;IAGE;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAQD,sBAAG,GAAH,UAAI,IAAY,EAAE,MAAc;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAMD,sBAAG,GAAH;QACE,OAAO,MAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAOD,uBAAI,GAAJ,UAAK,IAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAMD,yBAAM,GAAN,UAAO,IAAY;QACjB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,6BAAU,GAAV;QACE,WAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAS,OAAO;YACrD,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IACH,eAAC;AAAD,CAAC;;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;IACjD,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;QAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACtB,OAAO,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzE;QACD,IAAI,MAAM,GACR,yFAAyF,CAAC;QAC5F,IAAI,MAAM,GAAG,SAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;QAChE,MAAM,IAAI,kBAAyB,CAAI,MAAM,UAAK,MAAQ,CAAC,CAAC;KAC7D;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACzC,OAAO,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACnD;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QAC1C,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACpD;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,cAAqB,CAC7B,qCAAqC,GAAG,IAAI,GAAG,IAAI,CACpD,CAAC;KACH;SAAM;QACL,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC5C;AACH,CAAC;;;ACrF6F;AAI9C;AASX;AACsB;AACF;AACI;AACnB;AACuB;AAGrB;AAK5C,IAAI,OAAO,GAAG;IACZ,cAAc,EAAd;QACE,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,uBAAuB,EAAvB,UACE,GAAW,EACX,OAAiC;QAEjC,OAAO,IAAI,kBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,EAAb,UAAc,IAAY,EAAE,MAAc;QACxC,OAAO,IAAI,gBAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,oBAAoB,EAApB,UAAqB,IAAY,EAAE,MAAc;QAC/C,OAAO,IAAI,eAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,qBAAqB,EAArB,UAAsB,IAAY,EAAE,MAAc;QAChD,OAAO,IAAI,gBAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,sBAAsB,EAAtB,UACE,IAAY,EACZ,MAAc,EACd,IAAU;QAEV,OAAO,IAAI,iBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB,EAApB,UAAqB,QAAkB,EAAE,OAA8B;QACrE,OAAO,IAAI,eAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,eAAe,EAAf,UACE,SAA8B,EAC9B,QAAoC;QAEpC,OAAO,IAAI,oBAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,oCAAoC,EAApC,UACE,OAAyB,EACzB,SAAoB,EACpB,OAAyB;QAEzB,OAAO,IAAI,kCAA8B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACF,CAAC;AAEa,mDAAO,EAAC;;;AC3EgB;AAevC;IAIE,0BAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;IAClD,CAAC;IAOD,uCAAY,GAAZ,UAAa,SAAoB;QAC/B,OAAO,OAAO,CAAC,oCAAoC,CAAC,IAAI,EAAE,SAAS,EAAE;YACnE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAMD,kCAAO,GAAP;QACE,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5B,CAAC;IAGD,sCAAW,GAAX;QACE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACtB,CAAC;IACH,uBAAC;AAAD,CAAC;;;;ACnDmD;AACzB;AAC4B;AAcvD;IAOE,4BAAY,UAAsB,EAAE,OAAwB;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,wCAAW,GAAX;QACE,OAAO,GAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,oCAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAA/C,iBAoDC;QAnDC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,eAAe,GAAG,UAAC,KAAK,EAAE,SAAS;YACrC,IAAI,SAAS,EAAE;gBACb,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aAC3B;iBAAM;gBACL,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;gBACtB,IAAI,KAAI,CAAC,IAAI,EAAE;oBACb,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;iBACvC;gBAED,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE;oBAC/B,IAAI,OAAO,EAAE;wBACX,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;wBACtB,IAAI,KAAI,CAAC,YAAY,EAAE;4BACrB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAI,CAAC,YAAY,CAAC,CAAC;yBAChD;qBACF;oBACD,MAAM,GAAG,KAAI,CAAC,WAAW,CACvB,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,EACX,EAAE,OAAO,WAAE,QAAQ,EAAE,KAAI,CAAC,QAAQ,EAAE,EACpC,eAAe,CAChB,CAAC;iBACH;qBAAM;oBACL,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAChB;aACF;QACH,CAAC,CAAC;QAEF,MAAM,GAAG,IAAI,CAAC,WAAW,CACvB,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,EACX,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAC7C,eAAe,CAChB,CAAC;QAEF,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,wCAAW,GAAnB,UACE,QAAkB,EAClB,WAAmB,EACnB,OAAwB,EACxB,QAAkB;QAElB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;YACvB,KAAK,GAAG,IAAI,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE;gBACjC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE,SAAS;YAC9D,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAE5D,OAAO;aACR;YACD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,aAAa,EAAE,CAAC;aACvB;YACD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,KAAK,EAAE;oBACT,KAAK,CAAC,aAAa,EAAE,CAAC;iBACvB;gBACD,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;IACJ,CAAC;IACH,yBAAC;AAAD,CAAC;;;;AChImD;AACzB;AAO3B;IAGE,mCAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,+CAAW,GAAX;QACE,OAAO,GAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,2CAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAS,CAAC,EAAE,OAAO;YAC9D,OAAO,UAAS,KAAK,EAAE,SAAS;gBAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;gBACzB,IAAI,KAAK,EAAE;oBACT,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;wBAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC;qBAChB;oBACD,OAAO;iBACR;gBACD,KAAiB,CAAC,OAAO,EAAE,UAAS,MAAM;oBACxC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACH,gCAAC;AAAD,CAAC;;AAaD,SAAS,OAAO,CACd,UAAsB,EACtB,WAAmB,EACnB,eAAyB;IAEzB,IAAI,OAAO,GAAG,GAAe,CAAC,UAAU,EAAE,UAAS,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACnE,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE;YACL,KAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QACD,gBAAgB,EAAE,UAAS,CAAC;YAC1B,KAAiB,CAAC,OAAO,EAAE,UAAS,MAAM;gBACxC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAO;IAC/B,OAAO,eAAe,CAAC,OAAO,EAAE,UAAS,MAAM;QAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAAM;IACzB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACpC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;AACH,CAAC;;;AChF0B;AACG;AAEyB;AAIH;AAYpD;IAOE,wBACE,QAAkB,EAClB,UAAuC,EACvC,OAAwB;QAExB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,oCAAW,GAAX;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,gCAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CACb,IAAI,mBAAkB,CAAC,CAAC,SAAS,CAAC,EAAE;oBAClC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI;oBAChC,QAAQ,EAAE,IAAI;iBACf,CAAC,CACH,CAAC;aACH;SACF;QAED,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,UAAU;aACpB,GAAG,EAAE;aACL,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS;YAChD,IAAI,KAAK,EAAE;gBACT,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5B,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;iBACpD;qBAAM;oBACL,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACjB;aACF;iBAAM;gBACL,mBAAmB,CACjB,QAAQ,EACR,SAAS,CAAC,SAAS,CAAC,IAAI,EACxB,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAC5B,CAAC;gBACF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;QAEL,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IACH,qBAAC;AAAD,CAAC;;AAED,SAAS,oBAAoB,CAAC,QAAiB;IAC7C,OAAO,iBAAiB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,OAAO,GAAG,cAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,IAAI,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9D,IAAI,eAAe,EAAE;gBACnB,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;aACpC;SACF;QAAC,OAAO,CAAC,EAAE;YACV,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAC/B;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAiB,EACjB,SAA4B,EAC5B,OAAe;IAEf,IAAI,OAAO,GAAG,cAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,GAAG,iBAA6B,CAAC;gBACtE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;SAEX;KACF;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,OAAO,GAAG,cAAO,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE;QACX,IAAI;YACF,OAAO,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAChD;QAAC,OAAO,CAAC,EAAE;SAEX;KACF;AACH,CAAC;;;ACnJsD;AAYvD;IAIE,yBAAY,QAAkB,EAAE,EAAiB;YAAR,MAAM;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,qCAAW,GAAX;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,iCAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,GAAG,IAAI,WAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACxC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE;gBACL,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,KAAK,EAAE,CAAC;iBAChB;YACH,CAAC;YACD,gBAAgB,EAAE,UAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBAC5B;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IACH,sBAAC;AAAD,CAAC;;;;ACtCD;IAKE,oBACE,IAAmB,EACnB,UAAoB,EACpB,WAAqB;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,gCAAW,GAAX;QACE,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9D,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED,4BAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACH,iBAAC;AAAD,CAAC;;;;AC1BD;IAGE,gCAAY,QAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,4CAAW,GAAX;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,wCAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE,SAAS;YACvE,IAAI,SAAS,EAAE;gBACb,MAAM,CAAC,KAAK,EAAE,CAAC;aAChB;YACD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACH,6BAAC;AAAD,CAAC;;;;AC3BqD;AACW;AAEI;AACgB;AAG5C;AACsB;AACV;AACyB;AAI9E,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO;QACL,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,kBAAkB,GAAG,UACvB,MAAc,EACd,WAA4B,EAC5B,eAAyB;IAEzB,IAAI,iBAAiB,GAAgC,EAAE,CAAC;IAExD,SAAS,uBAAuB,CAC9B,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,OAAwB,EACxB,OAA0B;QAE1B,IAAI,SAAS,GAAG,eAAe,CAC7B,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,OAAO,CACR,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAEpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE;QAC/D,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM;QAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO;QAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,CAAC;IACH,IAAI,WAAW,GAAoB,MAAkB,CAAC,EAAE,EAAE,UAAU,EAAE;QACpE,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,IAAI,YAAY,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE;QACjE,UAAU,EAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ;QACnD,OAAO,EAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS;QACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG;QACb,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,iBAAgB,CAAC;QACpC,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,eAAe;KACrC,CAAC,CAAC;IACH,IAAI,iBAAiB,GAAG,IAAI,iBAAgB,CAAC;QAC3C,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,uBAAuB,CACxC,IAAI,EACJ,IAAI,EACJ,CAAC,EACD,UAAU,EACV,UAAU,CACX,CAAC;IACF,IAAI,aAAa,GAAG,uBAAuB,CACzC,KAAK,EACL,IAAI,EACJ,CAAC,EACD,WAAW,EACX,UAAU,CACX,CAAC;IACF,IAAI,uBAAuB,GAAG,uBAAuB,CACnD,eAAe,EACf,eAAe,EACf,CAAC,EACD,YAAY,EACZ,iBAAiB,CAClB,CAAC;IACF,IAAI,qBAAqB,GAAG,uBAAuB,CACjD,aAAa,EACb,aAAa,EACb,CAAC,EACD,YAAY,CACb,CAAC;IAEF,IAAI,OAAO,GAAG,IAAI,mBAAkB,CAAC,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAAG,IAAI,mBAAkB,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,cAAc,GAAG,IAAI,mBAAkB,CACzC,CAAC,uBAAuB,CAAC,EACzB,QAAQ,CACT,CAAC;IACF,IAAI,YAAY,GAAG,IAAI,mBAAkB,CAAC,CAAC,qBAAqB,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7E,IAAI,SAAS,GAAG,IAAI,mBAAkB,CACpC;QACE,IAAI,WAAU,CACZ,oBAAoB,CAAC,cAAc,CAAC,EACpC,IAAI,4BAAyB,CAAC;YAC5B,cAAc;YACd,IAAI,gBAAe,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACnD,CAAC,EACF,YAAY,CACb;KACF,EACD,QAAQ,CACT,CAAC;IAEF,IAAI,UAAU,CAAC;IACf,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,UAAU,GAAG,IAAI,4BAAyB,CAAC;YACzC,OAAO;YACP,IAAI,gBAAe,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAChD,CAAC,CAAC;KACJ;SAAM;QACL,UAAU,GAAG,IAAI,4BAAyB,CAAC;YACzC,OAAO;YACP,IAAI,gBAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9C,IAAI,gBAAe,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAChD,CAAC,CAAC;KACJ;IAED,OAAO,IAAI,eAAc,CACvB,IAAI,wBAAsB,CACxB,IAAI,WAAU,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAC1E,EACD,iBAAiB,EACjB;QACE,GAAG,EAAE,OAAO;QACZ,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CACF,CAAC;AACJ,CAAC,CAAC;AAEa,uEAAkB,EAAC;;;ACvJnB;IACb,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,oBAAoB,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC,CACH,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;QAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;KACjC;SAAM;QACL,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AACH,CAAC;;;;;;;;;;;;;;;;AClB6B;AAGqC;AAEnE,IAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AAErC;IAAyC,0CAAgB;IAQvD,qBAAY,KAAmB,EAAE,MAAc,EAAE,GAAW;QAA5D,YACE,iBAAO,SAIR;QAHC,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,GAAG,GAAG,GAAG,CAAC;;IACjB,CAAC;IAED,2BAAK,GAAL,UAAM,OAAa;QAAnB,iBAeC;QAdC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG;YACd,KAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;QACF,cAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;SAC/D;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,2BAAK,GAAL;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,cAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB;QACD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SACjB;IACH,CAAC;IAED,6BAAO,GAAP,UAAQ,MAAc,EAAE,IAAS;QAC/B,OAAO,IAAI,EAAE;YACX,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACrD;iBAAM;gBACL,MAAM;aACP;SACF;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9B;IACH,CAAC;IAEO,mCAAa,GAArB,UAAsB,MAAa;QACjC,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;YAC5B,IAAI,CAAC,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;YACvC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;SAC/C;aAAM;YAEL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAEO,qCAAe,GAAvB,UAAwB,MAAW;QACjC,OAAO,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;IAC9E,CAAC;IACH,kBAAC;AAAD,CAAC,CAzEwC,UAAgB,GAyExD;;;;AChFD,IAAK,KAIJ;AAJD,WAAK,KAAK;IACR,6CAAc;IACd,iCAAQ;IACR,qCAAU;AACZ,CAAC,EAJI,KAAK,KAAL,KAAK,QAIT;AAEc,+CAAK,EAAC;;;ACLO;AAGD;AAGG;AAE9B,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB;IAaE,oBAAY,KAAkB,EAAE,GAAW;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,yBAAI,GAAJ,UAAK,OAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,yBAAI,GAAJ;QACE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,0BAAK,GAAL,UAAM,IAAS,EAAE,MAAW;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAGD,4BAAO,GAAP,UAAQ,OAAY;QAClB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,EAAE;YAClC,IAAI;gBACF,cAAO,CAAC,mBAAmB,CACzB,MAAM,EACN,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACtD,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,KAAK,CAAC;aACd;SACF;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,8BAAS,GAAT;QACE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAGD,4BAAO,GAAP,UAAQ,IAAI,EAAE,MAAM,EAAE,QAAQ;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC;gBACX,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,4BAAO,GAAf,UAAgB,KAAK;QACnB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;YACxB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,EAAE;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,QAAQ,IAAI,EAAE;YACZ,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1B;gBACD,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM;SACT;IACH,CAAC;IAEO,2BAAM,GAAd,UAAe,OAAO;QACpB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;YACxC,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;YAE7B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;SACF;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,4BAAO,GAAf,UAAgB,KAAK;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACpD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACjC;IACH,CAAC;IAEO,+BAAU,GAAlB;QACE,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;IACH,CAAC;IAEO,4BAAO,GAAf,UAAgB,KAAK;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC;IAEO,+BAAU,GAAlB;QAAA,iBAwBC;QAvBC,IAAI,CAAC,MAAM,GAAG,cAAO,CAAC,mBAAmB,CACvC,MAAM,EACN,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAK;YAC7B,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAM;YACjC,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAClC,KAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SACrB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC;gBACT,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,gCAAW,GAAnB;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;IACH,iBAAC;AAAD,CAAC;AAED,SAAS,WAAW,CAAC,GAAG;IACtB,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAgB,EAAE,OAAe;IACnD,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,WAAW,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,GAAG,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,KAAK,GAAG,aAAa,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,QAAgB;IAChD,IAAI,QAAQ,GAAG,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,cAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5C;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAEc,sEAAU,EAAC;;;ACxN1B,IAAI,2BAAK,GAAgB;IACvB,aAAa,EAAE,UAAS,GAAG,EAAE,OAAO;QAClC,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,gBAAgB,GAAG,GAAG,CAAC,WAAW,CAAC;IACvE,CAAC;IACD,WAAW,EAAE,UAAS,MAAM;QAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,aAAa,EAAE,UAAS,MAAM;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,UAAU,EAAE,UAAS,MAAM,EAAE,MAAM;QACjC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF,CAAC;AAEa,qFAAK,EAAC;;;ACdrB,IAAI,yBAAK,GAAgB;IACvB,aAAa,EAAE,UAAS,GAAgB,EAAE,OAAe;QACvD,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7D,CAAC;IACD,WAAW,EAAE;IAEb,CAAC;IACD,aAAa,EAAE,UAAS,MAAM;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,UAAU,EAAE,UAAS,MAAM,EAAE,MAAM;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE;YAClB,MAAM,CAAC,SAAS,EAAE,CAAC;SACpB;aAAM;YACL,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAC;AAEa,iFAAK,EAAC;;;ACpBS;AAE9B,IAAI,sBAAK,GAAiB;IACxB,UAAU,EAAE,UAAS,MAAmB;QACtC,IAAI,WAAW,GAAG,cAAO,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,UAAU,GAAG;YACxC,QAAQ,GAAG,CAAC,UAAU,EAAE;gBACtB,KAAK,CAAC;oBACJ,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;qBAC9C;oBACD,MAAM;gBACR,KAAK,CAAC;oBAEJ,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;qBAC9C;oBACD,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM;aACT;QACH,CAAC,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,YAAY,EAAE,UAAS,GAAS;QAC9B,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC9B,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACF,CAAC;AAEa,2EAAK,EAAC;;;AClC4B;AACF;AAGc;AACJ;AACf;AAG1C,IAAI,IAAI,GAAgB;IACtB,qBAAqB,EAArB,UAAsB,GAAW;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAc,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,EAAnB,UAAoB,GAAW;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAY,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,EAAZ,UAAa,KAAkB,EAAE,GAAW;QAC1C,OAAO,IAAI,WAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,EAAT,UAAU,MAAc,EAAE,GAAW;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,aAAa,EAAb,UAAc,KAAmB,EAAE,MAAc,EAAE,GAAW;QAC5D,OAAO,IAAI,YAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEa,kDAAI,EAAC;;;AC/BkC;AACI;AAGN;AAEuC;AACrD;AAEtC,IAAI,UAAU,GAAQ;IACpB,kBAAkB;IAClB,UAAU,EAAmB,UAAU;IACvC,8BAA8B;IAC9B,WAAW;IAEX,KAAK,EAAL,UAAM,WAAW;QACf,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,eAAe,EAAf;QACE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB,EAAjB;QACE,OAAO,IAAgB,CACrB,YAAwB,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,UAAS,CAAC;YACxD,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,WAAW,EAAX;QACE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,EAAd;QACE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,EAAnB,UAAoB,MAAc,EAAE,GAAW;QAC7C,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAChD;aAAM;YACL,MAAM,8CAA8C,CAAC;SACtD;IACH,CAAC;IAED,SAAS,EAAT;QACE,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,eAAe,EAAf,UAAgB,GAAW;QACzB,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,iBAAiB,EAAjB,UAAkB,QAAa,IAAG,CAAC;IACnC,oBAAoB,EAApB,UAAqB,QAAa,IAAG,CAAC;CACvC,CAAC;AAEa,sDAAU,EAAC;;;;;;;;;;;;;;;;AC7D2C;AAGrE;IAA6B,kCAAgB;IAA7C;;IAIA,CAAC;IAHC,0BAAQ,GAAR;QACE,OAAO,IAAI,CAAC;IACd,CAAC;IACH,cAAC;AAAD,CAAC,CAJ4B,UAAgB,GAI5C;;AAEM,IAAI,gBAAO,GAAG,IAAI,OAAO,EAAE,CAAC;;;ACFS;AAE5C,IAAI,SAAS,GAAkB,UAC7B,OAAwB,EACxB,KAAa,EACb,WAAgC,EAChC,eAAgC,EAChC,QAA+B;IAE/B,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;IAEjE,KAAK,IAAI,UAAU,IAAI,WAAW,CAAC,OAAO,EAAE;QAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1D;IAED,IAAI,WAAW,CAAC,eAAe,IAAI,IAAI,EAAE;QACvC,IAAM,cAAc,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;QACrD,KAAK,IAAI,UAAU,IAAI,cAAc,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SACrD;KACF;IAED,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;QAC9C,OAAO;QACP,IAAI;QACJ,WAAW,EAAE,aAAa;QAC1B,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,OAAO,CAAC;SAClB,IAAI,CAAC,kBAAQ;QACN,UAAM,GAAK,QAAQ,OAAb,CAAc;QAC1B,IAAI,MAAM,KAAK,GAAG,EAAE;YAGlB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxB;QACD,MAAM,IAAI,aAAa,CACrB,MAAM,EACN,mBAAiB,eAAe,CAAC,QAAQ,EAAE,+CAA0C,MAAQ,CAC9F,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,cAAI;QACR,IAAI,UAAU,CAAC;QACf,IAAI;YACF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC/B;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,aAAa,CACrB,GAAG,EACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,kEAA6D,IAAM,CACpH,CAAC;SACH;QACD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7B,CAAC,CAAC,CACD,OAAK,EAAC,aAAG;QACR,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEa,wDAAS,EAAC;;;ACpEQ;AAEqB;AAKtD,IAAI,QAAQ,GAAG,UAAS,MAAsB,EAAE,MAAe;IAC7D,OAAO,UAAS,IAAS,EAAE,QAAkB;QAC3C,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QAClD,IAAI,GAAG,GACL,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACtE,IAAI,KAAK,GAAG,gBAA4B,CAAC,IAAI,CAAC,CAAC;QAC/C,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;QAE7B,KAAK,CAAC,GAAG,CAAC;aACP,IAAI,CAAC,kBAAQ;YACZ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,MAAM,cAAY,QAAQ,CAAC,MAAM,2BAAwB,CAAC;aAC3D;YACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC,CAAC;aACD,IAAI,CAAC,UAAC,EAAQ;gBAAN,IAAI;YACX,IAAI,IAAI,EAAE;gBACR,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;QACH,CAAC,CAAC,CACD,OAAK,EAAC,aAAG;YACR,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAI,aAAa,GAAG;IAClB,IAAI,EAAE,KAAK;IACX,QAAQ;CACT,CAAC;AAEa,gEAAa,EAAC;;;ACtCe;AAEP;AACK;AAEY;AAMpD,8BAAkB,GAahB,OAAU,mBAbM,EAClB,kBAAU,GAYR,OAAU,WAZF,EACV,KAAK,GAWH,OAAU,MAXP,EACL,WAAW,GAUT,OAAU,YAVD,EACX,cAAc,GASZ,OAAU,eATE,EACd,eAAe,GAQb,OAAU,gBARG,EACf,SAAS,GAOP,OAAU,UAPH,EACT,eAAe,GAMb,OAAU,gBANG,EACf,iBAAiB,GAKf,OAAU,kBALK,EACjB,oBAAoB,GAIlB,OAAU,qBAJQ,EACpB,8BAA8B,GAG5B,OAAU,+BAHkB,EAC9B,mBAAmB,GAEjB,OAAU,oBAFO,EACnB,WAAW,GACT,OAAU,YADD,CACE;AAEf,IAAM,MAAM,GAAY;IACtB,kBAAkB;IAClB,UAAU;IACV,KAAK;IACL,WAAW;IACX,cAAc;IACd,eAAe;IACf,SAAS;IACT,eAAe;IACf,iBAAiB;IACjB,oBAAoB;IACpB,8BAA8B;IAC9B,mBAAmB;IACnB,WAAW;IAEX,iBAAiB,EAAE,cAAa;IAEhC,cAAc,EAAd;QACE,OAAO,EAAE,IAAI,EAAE,UAAS,EAAE,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,UAAU;QACR,OAAO,gBAAO,CAAC;IACjB,CAAC;IAED,SAAS,EAAT,UAAU,GAAW;QAInB,IAAM,MAAM,GAAG;YACb,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7D,OAAO,MAAM,GAAG,UAAC,EAAI,EAAE,EAAC;QAC1B,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACpC,CAAC;CACF,CAAC;AAEa,yDAAM,EAAC;;;AC1EtB,IAAK,aAIJ;AAJD,WAAK,aAAa;IAChB,mDAAS;IACT,iDAAQ;IACR,mDAAS;AACX,CAAC,EAJI,aAAa,KAAb,aAAa,QAIjB;AAEc,gEAAa,EAAC;;;ACNuB;AACzB;AACgB;AAW3C;IAQE,kBAAY,GAAW,EAAE,OAAe,EAAE,OAAwB;QAChE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,sBAAG,GAAH,UAAI,KAAK,EAAE,KAAK;QACd,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,MAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CACzD,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACjE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;aACrB;SACF;IACH,CAAC;IAED,wBAAK,GAAL,UAAM,KAAK;QACT,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,uBAAI,GAAJ,UAAK,KAAK;QACR,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,wBAAK,GAAL,UAAM,KAAK;QACT,IAAI,CAAC,GAAG,CAAC,cAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,0BAAO,GAAP;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,uBAAI,GAAJ,UAAK,MAAM,EAAE,QAAQ;QAArB,iBA0BC;QAzBC,IAAI,IAAI,GAAG,MAAkB,CAC3B;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM;SACtB,EACD,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,EAAE,UAAC,KAAK,EAAE,MAAM;YACzB,IAAI,CAAC,KAAK,EAAE;gBACV,KAAI,CAAC,IAAI,EAAE,CAAC;aACb;YACD,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAgB,GAAhB;QACE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACH,eAAC;AAAD,CAAC;;;;ACzFsC;AACZ;AACS;AACgB;AAapD;IAME,2BACE,IAAY,EACZ,QAAgB,EAChB,SAAoB,EACpB,OAAwB;QAExB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAMD,uCAAW,GAAX;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IAOD,mCAAO,GAAP,UAAQ,WAAmB,EAAE,QAAkB;QAA/C,iBAmFC;QAlFC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,OAAO,WAAW,CAAC,IAAI,mBAA0B,EAAE,EAAE,QAAQ,CAAC,CAAC;SAChE;aAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,EAAE;YACtC,OAAO,WAAW,CAAC,IAAI,uBAA8B,EAAE,EAAE,QAAQ,CAAC,CAAC;SACpE;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC7C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,IAAI,aAAa,GAAG;YAClB,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/C,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,MAAM,GAAG;YACX,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,UAAS,MAAM;gBAC5D,SAAS,GAAG,IAAI,CAAC;gBACjB,eAAe,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,OAAO,GAAG,UAAS,KAAK;YAC1B,eAAe,EAAE,CAAC;YAClB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG;YACb,eAAe,EAAE,CAAC;YAClB,IAAI,mBAAmB,CAAC;YAMxB,mBAAmB,GAAG,iBAA6B,CAAC,SAAS,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,eAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,IAAI,eAAe,GAAG;YACpB,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAGnC,SAAS,CAAC,UAAU,EAAE,CAAC;QAEvB,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,SAAS,EAAE;oBACb,OAAO;iBACR;gBACD,eAAe,EAAE,CAAC;gBAClB,IAAI,SAAS,EAAE;oBACb,SAAS,CAAC,KAAK,EAAE,CAAC;iBACnB;qBAAM;oBACL,SAAS,CAAC,KAAK,EAAE,CAAC;iBACnB;YACH,CAAC;YACD,gBAAgB,EAAE,WAAC;gBACjB,IAAI,SAAS,EAAE;oBACb,OAAO;iBACR;gBACD,IAAI,KAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;oBACrB,IAAI,SAAS,EAAE;wBACb,SAAS,CAAC,KAAK,EAAE,CAAC;qBACnB;yBAAM;wBACL,SAAS,CAAC,KAAK,EAAE,CAAC;qBACnB;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IACH,wBAAC;AAAD,CAAC;;AAED,SAAS,WAAW,CAAC,KAAY,EAAE,QAAkB;IACnD,IAAI,CAAC,KAAK,CAAC;QACT,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,cAAY,CAAC;QACpB,gBAAgB,EAAE,cAAY,CAAC;KAChC,CAAC;AACJ,CAAC;;;AC/ImD;AACzB;AAES;AAEiB;AAGvB;AAEtB,+BAAU,GAAK,cAAO,WAAZ,CAAa;AAExB,IAAI,gCAAe,GAAG,UAC3B,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,OAAwB,EACxB,OAA0B;IAE1B,IAAI,cAAc,GAAG,2BAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,oBAA2B,CAAC,IAAI,CAAC,CAAC;KAC7C;IAED,IAAI,OAAO,GACT,CAAC,CAAC,MAAM,CAAC,iBAAiB;QACxB,YAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,MAAM,CAAC,kBAAkB;YACzB,YAAwB,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtE,IAAI,SAAS,CAAC;IACd,IAAI,OAAO,EAAE;QACX,OAAO,GAAG,MAAM,CAAC,MAAM,CACrB,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAC7C,OAAO,CACR,CAAC;QAEF,SAAS,GAAG,IAAI,kBAAiB,CAC/B,IAAI,EACJ,QAAQ,EACR,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,EAC/D,OAAO,CACR,CAAC;KACH;SAAM;QACL,SAAS,GAAG,oCAAmB,CAAC;KACjC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,IAAI,oCAAmB,GAAa;IAClC,WAAW,EAAE;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,UAAS,CAAC,EAAE,QAAQ;QAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,IAAI,mBAA0B,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE;gBACL,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC;YACD,gBAAgB,EAAE,cAAY,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAC;;;ACvD4B;AAmCvB,SAAS,eAAe,CAAC,OAAO;IACrC,IAAI,OAAO,IAAI,IAAI,EAAE;QACnB,MAAM,iCAAiC,CAAC;KACzC;IACD,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;QAC3B,MAAM,uCAAuC,CAAC;KAC/C;IACD,IAAI,cAAc,IAAI,OAAO,EAAE;QAC7B,MAAM,CAAC,IAAI,CACT,+DAA+D,CAChE,CAAC;KACH;AACH,CAAC;;;AC1DD,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,6DAA0C;IAC1C,iEAA8C;AAChD,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;;;ACGkB;AAEW;AAE9B,IAAM,mBAAmB,GAAG,UAC1B,MAAuC,EACvC,WAAgC;IAEhC,IAAI,KAAK,GAAG,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/D,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;QAClC,KAAK;YACH,GAAG;gBACH,kBAAkB,CAAC,GAAG,CAAC;gBACvB,GAAG;gBACH,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;IAED,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE;QACtC,IAAI,aAAa,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,KAAK,IAAI,GAAG,IAAI,aAAa,EAAE;YAC7B,KAAK;gBACH,GAAG;oBACH,kBAAkB,CAAC,GAAG,CAAC;oBACvB,GAAG;oBACH,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UACxB,WAAgC;IAEhC,IAAI,OAAO,cAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;QAC1E,MAAM,MAAI,WAAW,CAAC,SAAS,yCAAsC,CAAC;KACvE;IAED,OAAO,UACL,MAAuC,EACvC,QAAoC;QAEpC,IAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEvD,cAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAC7C,cAAO,EACP,KAAK,EACL,WAAW,EACX,eAAe,CAAC,kBAAkB,EAClC,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,wEAAiB,EAAC;;;ACvDd;AAEW;AAE9B,IAAM,sCAAmB,GAAG,UAC1B,MAAyC,EACzC,WAAgC;IAEhC,IAAI,KAAK,GAAG,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/D,KAAK,IAAI,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnE,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;QAClC,KAAK;YACH,GAAG;gBACH,kBAAkB,CAAC,GAAG,CAAC;gBACvB,GAAG;gBACH,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/C;IAED,IAAI,WAAW,CAAC,cAAc,IAAI,IAAI,EAAE;QACtC,IAAI,aAAa,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QACjD,KAAK,IAAI,GAAG,IAAI,aAAa,EAAE;YAC7B,KAAK;gBACH,GAAG;oBACH,kBAAkB,CAAC,GAAG,CAAC;oBACvB,GAAG;oBACH,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UACxB,WAAgC;IAEhC,IAAI,OAAO,cAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW,EAAE;QAC1E,MAAM,MAAI,WAAW,CAAC,SAAS,yCAAsC,CAAC;KACvE;IAED,OAAO,UACL,MAAyC,EACzC,QAAsC;QAEtC,IAAM,KAAK,GAAG,sCAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEvD,cAAO,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAC7C,cAAO,EACP,KAAK,EACL,WAAW,EACX,eAAe,CAAC,oBAAoB,EACpC,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,wEAAiB,EAAC;;;ACjC1B,IAAM,sBAAsB,GAAG,UACpC,MAAM,EACN,WAAgC,EAChC,0BAAsD;IAEtD,IAAM,2BAA2B,GAAgC;QAC/D,aAAa,EAAE,WAAW,CAAC,SAAS;QACpC,YAAY,EAAE,WAAW,CAAC,QAAQ;QAClC,IAAI,EAAE;YACJ,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B;KACF,CAAC;IACF,OAAO,UACL,MAAyC,EACzC,QAAsC;QAEtC,IAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAInD,IAAM,iBAAiB,GAAgC,0BAA0B,CAC/E,OAAO,EACP,2BAA2B,CAC5B,CAAC;QACF,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC,CAAC;;;;;;;;;;;;;;ACxDgC;AAMwB;AACA;AACoB;AAChD;AA2CvB,SAAS,SAAS,CAAC,IAAa,EAAE,MAAM;IAC7C,IAAI,MAAM,GAAW;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe;QACjE,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QACrD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU;QAChD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB;QAC1E,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACtC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QAEzC,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACvC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAE9B,iBAAiB,EAAE,sBAAsB,CAAC,IAAI,CAAC;QAC/C,iBAAiB,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC;KACxD,CAAC;IAEF,IAAI,oBAAoB,IAAI,IAAI;QAC9B,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACtD,IAAI,mBAAmB,IAAI,IAAI;QAC7B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACpD,IAAI,kBAAkB,IAAI,IAAI;QAC5B,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAClD,IAAI,gBAAgB,IAAI,IAAI;QAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC1E,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACzB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IACD,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,OAAO,YAAU,IAAI,CAAC,OAAO,gBAAa,CAAC;KAC5C;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,OAAO,QAAM,OAAO,gBAAa,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,cAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;QACtC,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;QAClC,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,aAAa,IAAI,IAAI,EAAE;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAI,cAAc,IAAI,IAAI,EAAE;QAC1B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;KAC3B;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAa;IAC3C,IAAM,kBAAkB,yBACnB,QAAQ,CAAC,kBAAkB,GAC3B,IAAI,CAAC,kBAAkB,CAC3B,CAAC;IACF,IACE,eAAe,IAAI,kBAAkB;QACrC,kBAAkB,CAAC,eAAe,CAAC,IAAI,IAAI,EAC3C;QACA,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;KAC5C;IAED,OAAO,kBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,MAAM;IAC7C,IAAI,oBAAiD,CAAC;IACtD,IAAI,sBAAsB,IAAI,IAAI,EAAE;QAClC,oBAAoB,yBACf,QAAQ,CAAC,oBAAoB,GAC7B,IAAI,CAAC,oBAAoB,CAC7B,CAAC;KACH;SAAM;QACL,oBAAoB,GAAG;YACrB,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa;YACvD,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;SACrD,CAAC;QACF,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1E,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI;gBACxB,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;SACpD;QACD,IAAI,YAAY,IAAI,IAAI;YACtB,oBAAoB,CAAC,aAAa,GAAG,sBAAsB,CACzD,MAAM,EACN,oBAAoB,EACpB,IAAI,CAAC,UAAU,CAChB,CAAC;KACL;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAa,EACb,MAAM;IAEN,IAAM,oBAAoB,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,IACE,eAAe,IAAI,oBAAoB;QACvC,oBAAoB,CAAC,eAAe,CAAC,IAAI,IAAI,EAC7C;QACA,OAAO,oBAAoB,CAAC,eAAe,CAAC,CAAC;KAC9C;IAED,OAAO,kBAAiB,CAAC,oBAAoB,CAAC,CAAC;AACjD,CAAC;;;;;;;;;;;;;;;;AC5L6B;AAEqB;AAEnD;IAA6C,2CAAgB;IAG3D,yBAAmB,MAAc;QAAjC,YACE,kBAAM,UAAS,SAAS,EAAE,IAAI;YAC5B,MAAM,CAAC,KAAK,CAAC,0CAAwC,SAAW,CAAC,CAAC;QACpE,CAAC,CAAC,SAIH;QAFC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,0BAA0B,EAAE,CAAC;;IACpC,CAAC;IAED,qCAAW,GAAX,UAAY,WAAW;QAAvB,iBAIC;QAHC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAc;YAC5C,KAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oDAA0B,GAAlC;QAAA,iBAOC;QANC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAW;YAChD,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,IAAI,SAAS,KAAK,kCAAkC,EAAE;gBACpD,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACH,sBAAC;AAAD,CAAC,CA1B4C,UAAgB,GA0B5D;;;;AC9BD,SAAS,WAAW;IAClB,IAAI,OAAO,EAAE,MAAM,CAAC;IACpB,IAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAC,GAAG,EAAE,GAAG;QACnC,OAAO,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,WAAE,OAAO,WAAE,MAAM,UAAE,CAAC;AACtC,CAAC;AAEc,4DAAW,EAAC;;;;;;;;;;;;;;;;ACRG;AAKW;AACC;AACS;AACJ;AAE/C;IAAwC,iCAAgB;IAStD,oBAAmB,MAAc;QAAjC,YACE,kBAAM,UAAS,SAAS,EAAE,IAAI;YAC5B,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,SA0BH;QApCD,sBAAgB,GAAY,KAAK,CAAC;QAClC,eAAS,GAAQ,IAAI,CAAC;QACtB,yBAAmB,GAAY,IAAI,CAAC;QACpC,uBAAiB,GAAiB,IAAI,CAAC;QAE/B,wBAAkB,GAAa,IAAI,CAAC;QA8DpC,kBAAY,GAA+B,UACjD,GAAG,EACH,QAAgC;YAEhC,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,IAAI,CAAC,0BAAwB,GAAK,CAAC,CAAC;gBAC3C,KAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO;aACR;YAED,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B,CAAC,CAAC;QAGL,CAAC,CAAC;QAxEA,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,UAAC,EAAqB;gBAAnB,QAAQ,gBAAE,OAAO;YAC9D,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,EAAE;gBACvD,KAAI,CAAC,OAAO,EAAE,CAAC;aAChB;YACD,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,EAAE;gBACvD,KAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,KAAI,CAAC,yBAAyB,EAAE,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,SAAS,GAAG,IAAI,SAAe,CAAC,MAAM,CAAC,CAAC;QAE7C,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,eAAK;YAC1C,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,IAAI,SAAS,KAAK,uBAAuB,EAAE;gBACzC,KAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,IACE,KAAI,CAAC,mBAAmB;gBACxB,KAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAC/C;gBACA,KAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;;IACL,CAAC;IAEM,2BAAM,GAAb;QACE,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,4BAAO,GAAf;QACE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE;YAEhD,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAClC;YACE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;SAC3C,EACD,IAAI,CAAC,YAAY,CAClB,CAAC;IACJ,CAAC;IAoBO,qCAAgB,GAAxB,UAAyB,IAAS;QAChC,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,4CAA0C,IAAI,CAAC,SAAW,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;SACR;QAED,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;YACrE,MAAM,CAAC,KAAK,CACV,iDAA+C,IAAI,CAAC,SAAW,CAChE,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;SACR;QAGD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,uCAAkB,GAA1B;QAAA,iBA2BC;QA1BC,IAAM,iBAAiB,GAAG,iBAAO;YAC/B,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,EAAE;gBAChE,OAAO,CAAC,qBAAqB,EAAE,CAAC;aACjC;iBAAM,IACL,CAAC,OAAO,CAAC,mBAAmB;gBAC5B,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EAC5C;gBACA,OAAO,CAAC,SAAS,EAAE,CAAC;aACrB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,gBAAO,CACpC,qBAAmB,IAAI,CAAC,SAAS,CAAC,EAAI,EACtC,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAC,SAAS,EAAE,IAAI;YACnD,IACE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC3C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAClC;gBAEA,OAAO;aACR;YACD,KAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IAEO,6BAAQ,GAAhB;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAGzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;IACH,CAAC;IAEO,8CAAyB,GAAjC;QACE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAE,IAAI,CAAC,iBAAyB,CAAC,IAAI,EAAE;YACnE,OAAO;SACR;QAIK,SAAkC,YAAW,EAAE,EAA7C,OAAO,eAAE,OAAO,eAAU,CAAC,YAAkB,CAAC;QACrD,OAAe,CAAC,IAAI,GAAG,KAAK,CAAC;QAC9B,IAAM,OAAO,GAAG;YACb,OAAe,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAK,EAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACpC,CAAC;IACH,iBAAC;AAAD,CAAC,CA9KuC,UAAgB,GA8KvD;;;;ACxL6B;AAEqB;AAGe;AACvB;AAEE;AACmB;AAGjB;AACb;AAEJ;AACQ;AAEe;AACR;AAEb;AAEhC;IAwCE,gBAAY,OAAe,EAAE,OAAgB;QAA7C,iBA6EC;QA5EC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,UAAgB,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,cAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE;YACrD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,QAAQ,EAAE,MAAM,CAAC,iBAAiB,EAAE;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE;YACxC,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,cAAa,CAAC,IAAI;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAC3B,IAAI,EAAE,eAAe,GAAG,cAAO,CAAC,iBAAiB,CAAC,IAAI;aACvD,CAAC,CAAC;SACJ;QAED,IAAI,WAAW,GAAG,UAAC,OAAwB;YACzC,OAAO,cAAO,CAAC,kBAAkB,CAAC,KAAI,CAAC,MAAM,EAAE,OAAO,EAAE,gCAAe,CAAC,CAAC;QAC3E,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1D,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;YAClD,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;YAChC,KAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,KAAI,CAAC,cAAc,EAAE;gBACvB,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;aACxD;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,eAAK;YACnC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,IAAI,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC5B;aACF;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE;YACjC,KAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;YACnC,KAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,aAAG;YAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,IAAI,GAAG,IAAI,IAAU,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;IACH,CAAC;IAzGM,YAAK,GAAZ;QACE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B;IACH,CAAC;IAIc,wBAAiB,GAAhC;QACE,OAAO,IAAgB,CACrB,YAAwB,CAAC,EAAE,EAAE,EAAE,cAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,UAAS,CAAC;YAChE,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IA4FD,wBAAO,GAAP,UAAQ,IAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,4BAAW,GAAX;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,wBAAO,GAAP;QACE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;gBACzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE;oBAClD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAED,2BAAU,GAAV;QACE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;IACH,CAAC;IAED,qBAAI,GAAJ,UAAK,UAAkB,EAAE,QAAkB,EAAE,OAAa;QACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAM,GAAN,UAAO,UAAmB,EAAE,QAAmB,EAAE,OAAa;QAC5D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAAW,GAAX,UAAY,QAAkB;QAC5B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAAa,GAAb,UAAc,QAAmB;QAC/B,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAAU,GAAV,UAAW,QAAmB;QAC5B,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAAY,GAAZ;QACE,IAAI,WAAW,CAAC;QAChB,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACtD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;aAC7B;SACF;IACH,CAAC;IAED,0BAAS,GAAT,UAAU,YAAoB;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,EAAE;YAChE,OAAO,CAAC,qBAAqB,EAAE,CAAC;SACjC;aAAM,IACL,CAAC,OAAO,CAAC,mBAAmB;YAC5B,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,WAAW,EACrC;YACA,OAAO,CAAC,SAAS,EAAE,CAAC;SACrB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4BAAW,GAAX,UAAY,YAAoB;QAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,mBAAmB,EAAE;YAC1C,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAC9B;aAAM;YACL,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE;gBACjC,OAAO,CAAC,WAAW,EAAE,CAAC;aACvB;SACF;IACH,CAAC;IAED,2BAAU,GAAV,UAAW,UAAkB,EAAE,IAAS,EAAE,OAAgB;QACxD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,6BAAY,GAAZ;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,uBAAM,GAAN;QACE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAzNM,gBAAS,GAAa,EAAE,CAAC;IACzB,cAAO,GAAY,KAAK,CAAC;IACzB,mBAAY,GAAY,KAAK,CAAC;IAG9B,cAAO,GAAoB,cAAO,CAAC;IACnC,sBAAe,GAAc,cAAQ,CAAC,eAAe,CAAC;IACtD,4BAAqB,GAAc,cAAQ,CAAC,qBAAqB,CAAC;IAClE,qBAAc,GAAc,cAAQ,CAAC,cAAc,CAAC;IAkN7D,aAAC;CAAA;AA5NoB,8FAAM;AA8N3B,SAAS,WAAW,CAAC,GAAG;IACtB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;QACrC,MAAM,yDAAyD,CAAC;KACjE;AACH,CAAC;AAED,cAAO,CAAC,KAAK,CAAC,aAAM,CAAC,CAAC","file":"pusher.worker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts"],"names":[],"mappings":"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","file":"pusher.worker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/worker/pusher.worker.min.js b/dist/worker/pusher.worker.min.js index df66690ee..6f177ac7e 100644 --- a/dist/worker/pusher.worker.min.js +++ b/dist/worker/pusher.worker.min.js @@ -1,9 +1,9 @@ /*! - * Pusher JavaScript Library v8.0.2 + * Pusher JavaScript Library v8.1.0 * https://pusher.com/ * * Copyright 2020, Pusher * Released under the MIT licence. */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Pusher=e():t.Pusher=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";var r,o=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){void 0===t&&(t="="),this._paddingCharacter=t}return t.prototype.encodedLength=function(t){return this._paddingCharacter?(t+2)/3*4|0:(8*t+5)/6|0},t.prototype.encode=function(t){for(var e="",n=0;n>>18&63),e+=this._encodeByte(r>>>12&63),e+=this._encodeByte(r>>>6&63),e+=this._encodeByte(r>>>0&63)}var o=t.length-n;if(o>0){r=t[n]<<16|(2===o?t[n+1]<<8:0);e+=this._encodeByte(r>>>18&63),e+=this._encodeByte(r>>>12&63),e+=2===o?this._encodeByte(r>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,r=new Uint8Array(this.maxDecodedLength(n)),o=0,i=0,s=0,c=0,a=0,u=0,h=0;i>>4,r[o++]=a<<4|u>>>2,r[o++]=u<<6|h,s|=256&c,s|=256&a,s|=256&u,s|=256&h;if(i>>4,s|=256&c,s|=256&a),i>>2,s|=256&u),i>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=i;var s=new i;e.encode=function(t){return s.encode(t)},e.decode=function(t){return s.decode(t)};var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(i);e.URLSafeCoder=c;var a=new c;e.encodeURLSafe=function(t){return a.encode(t)},e.decodeURLSafe=function(t){return a.decode(t)},e.encodedLength=function(t){return s.encodedLength(t)},e.maxDecodedLength=function(t){return s.maxDecodedLength(t)},e.decodedLength=function(t){return s.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="utf8: invalid source encoding";function o(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(o(t)),n=0,r=0;r>6,e[n++]=128|63&i):i<55296?(e[n++]=224|i>>12,e[n++]=128|i>>6&63,e[n++]=128|63&i):(r++,i=(1023&i)<<10,i|=1023&t.charCodeAt(r),i+=65536,e[n++]=240|i>>18,e[n++]=128|i>>12&63,e[n++]=128|i>>6&63,e[n++]=128|63&i)}return e},e.encodedLength=o,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(r);if(128!=(192&(s=t[++n])))throw new Error(r);o=(31&o)<<6|63&s,i=128}else if(o<240){if(n>=t.length-1)throw new Error(r);var s=t[++n],c=t[++n];if(128!=(192&s)||128!=(192&c))throw new Error(r);o=(15&o)<<12|(63&s)<<6|63&c,i=2048}else{if(!(o<248))throw new Error(r);if(n>=t.length-2)throw new Error(r);s=t[++n],c=t[++n];var a=t[++n];if(128!=(192&s)||128!=(192&c)||128!=(192&a))throw new Error(r);o=(15&o)<<18|(63&s)<<12|(63&c)<<6|63&a,i=65536}if(o=55296&&o<=57343)throw new Error(r);if(o>=65536){if(o>1114111)throw new Error(r);o-=65536,e.push(String.fromCharCode(55296|o>>10)),o=56320|1023&o}}e.push(String.fromCharCode(o))}return e.join("")}},function(t,e,n){t.exports=n(3).default},function(t,e,n){"use strict";n.r(e);for(var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i={},s=0,c=o.length;s>>6)+r(128|63&e):r(224|e>>>12&15)+r(128|e>>>6&63)+r(128|63&e)},h=function(t){return t.replace(/[^\x00-\x7F]/g,u)},p=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[o.charAt(n>>>18),o.charAt(n>>>12&63),e>=2?"=":o.charAt(n>>>6&63),e>=1?"=":o.charAt(63&n)].join("")},l=self.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,p)},f=function(){function t(t,e,n,r){var o=this;this.clear=e,this.timer=t((function(){o.timer&&(o.timer=r(o.timer))}),n)}return t.prototype.isRunning=function(){return null!==this.timer},t.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},t}(),d=(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});function y(t){self.clearTimeout(t)}function g(t){self.clearInterval(t)}var v=function(t){function e(e,n){return t.call(this,setTimeout,y,e,(function(t){return n(),null}))||this}return d(e,t),e}(f),b=function(t){function e(e,n){return t.call(this,setInterval,g,e,(function(t){return n(),t}))||this}return d(e,t),e}(f),m={now:function(){return Date.now?Date.now():(new Date).valueOf()},defer:function(t){return new v(0,t)},method:function(t){for(var e=[],n=1;n0)for(r=0;r=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}},Z=K,tt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),et=function(t){function e(e,n){var r=t.call(this)||this;return r.id=e,r.transport=n,r.activityTimeout=n.activityTimeout,r.bindListeners(),r}return tt(e,t),e.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},e.prototype.send=function(t){return this.transport.send(t)},e.prototype.send_event=function(t,e,n){var r={event:t,data:e};return n&&(r.channel=n),B.debug("Event sent",r),this.send(Z.encodeMessage(r))},e.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},e.prototype.close=function(){this.transport.close()},e.prototype.bindListeners=function(){var t=this,e={message:function(e){var n;try{n=Z.decodeMessage(e)}catch(n){t.emit("error",{type:"MessageParseError",error:n,data:e.data})}if(void 0!==n){switch(B.debug("Event recd",n),n.event){case"pusher:error":t.emit("error",{type:"PusherError",data:n.data});break;case"pusher:ping":t.emit("ping");break;case"pusher:pong":t.emit("pong")}t.emit("message",n)}},activity:function(){t.emit("activity")},error:function(e){t.emit("error",e)},closed:function(e){n(),e&&e.code&&t.handleCloseEvent(e),t.transport=null,t.emit("closed")}},n=function(){k(e,(function(e,n){t.transport.unbind(n,e)}))};k(e,(function(e,n){t.transport.bind(n,e)}))},e.prototype.handleCloseEvent=function(t){var e=Z.getCloseAction(t),n=Z.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})},e}(z),nt=function(){function t(t,e){this.transport=t,this.callback=e,this.bindListeners()}return t.prototype.close=function(){this.unbindListeners(),this.transport.close()},t.prototype.bindListeners=function(){var t=this;this.onMessage=function(e){var n;t.unbindListeners();try{n=Z.processHandshake(e)}catch(e){return t.finish("error",{error:e}),void t.transport.close()}"connected"===n.action?t.finish("connected",{connection:new et(n.id,t.transport),activityTimeout:n.activityTimeout}):(t.finish(n.action,{error:n.error}),t.transport.close())},this.onClosed=function(e){t.unbindListeners();var n=Z.getCloseAction(e)||"backoff",r=Z.getCloseError(e);t.finish(n,{error:r})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},t.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},t.prototype.finish=function(t,e){this.callback(_({transport:this.transport,action:t},e))},t}(),rt=function(){function t(t,e){this.timeline=t,this.options=e||{}}return t.prototype.send=function(t,e){this.timeline.isEmpty()||this.timeline.send(se.TimelineTransport.getAgent(this,t),e)},t}(),ot=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),it=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),st=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),ct=(function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}ot(e,t)}(Error),function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error)),at=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),ut=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),ht=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),pt=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return Object.setPrototypeOf(r,n.prototype),r}return ot(e,t),e}(Error),lt=function(t){function e(e,n){var r=this.constructor,o=t.call(this,n)||this;return o.status=e,Object.setPrototypeOf(o,r.prototype),o}return ot(e,t),e}(Error),ft={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},dt=function(t){var e,n=ft.urls[t];return n?(n.fullUrl?e=n.fullUrl:n.path&&(e=ft.baseUrl+n.path),e?"See: "+e:""):""},yt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),gt=function(t){function e(e,n){var r=t.call(this,(function(t,n){B.debug("No callbacks on "+e+" for "+t)}))||this;return r.name=e,r.pusher=n,r.subscribed=!1,r.subscriptionPending=!1,r.subscriptionCancelled=!1,r}return yt(e,t),e.prototype.authorize=function(t,e){return e(null,{auth:""})},e.prototype.trigger=function(t,e){if(0!==t.indexOf("client-"))throw new it("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=dt("triggeringClientEvents");B.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)},e.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},e.prototype.handleEvent=function(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}},e.prototype.handleSubscriptionSucceededEvent=function(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)},e.prototype.handleSubscriptionCountEvent=function(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)},e.prototype.subscribe=function(){var t=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(function(e,n){e?(t.subscriptionPending=!1,B.error(e.toString()),t.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:e.message},e instanceof lt?{status:e.status}:{}))):t.pusher.send_event("pusher:subscribe",{auth:n.auth,channel_data:n.channel_data,channel:t.name})})))},e.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},e.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},e.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},e}(z),vt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),bt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return vt(e,t),e.prototype.authorize=function(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)},e}(gt),mt=function(){function t(){this.reset()}return t.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},t.prototype.each=function(t){var e=this;k(this.members,(function(n,r){t(e.get(r))}))},t.prototype.setMyID=function(t){this.myID=t},t.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},t.prototype.addMember=function(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},t.prototype.removeMember=function(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e},t.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},t}(),_t=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),wt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{a(r.next(t))}catch(t){i(t)}}function c(t){try{a(r.throw(t))}catch(t){i(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,c)}a((r=r.apply(t,e||[])).next())}))},St=function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new v(t||0,(function(){e.disconnectInternally(),e.connect()}))},e.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},e.prototype.setUnavailableTimer=function(){var t=this;this.unavailableTimer=new v(this.options.unavailableTimeout,(function(){t.updateState("unavailable")}))},e.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},e.prototype.sendActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new v(this.options.pongTimeout,(function(){t.timeline.error({pong_timed_out:t.options.pongTimeout}),t.retryIn(0)}))},e.prototype.resetActivityCheck=function(){var t=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new v(this.activityTimeout,(function(){t.sendActivityCheck()})))},e.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},e.prototype.buildConnectionCallbacks=function(t){var e=this;return _({},t,{message:function(t){e.resetActivityCheck(),e.emit("message",t)},ping:function(){e.send_event("pusher:pong",{})},activity:function(){e.resetActivityCheck()},error:function(t){e.emit("error",t)},closed:function(){e.abandonConnection(),e.shouldRetry()&&e.retryIn(1e3)}})},e.prototype.buildHandshakeCallbacks=function(t){var e=this;return _({},t,{connected:function(t){e.activityTimeout=Math.min(e.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),e.clearUnavailableTimer(),e.setConnection(t.connection),e.socket_id=e.connection.id,e.updateState("connected",{socket_id:e.socket_id})}})},e.prototype.buildErrorCallbacks=function(){var t=this,e=function(e){return function(n){n.error&&t.emit("error",{type:"WebSocketError",error:n.error}),e(n)}};return{tls_only:e((function(){t.usingTLS=!0,t.updateStrategy(),t.retryIn(0)})),refused:e((function(){t.disconnect()})),backoff:e((function(){t.retryIn(1e3)})),retry:e((function(){t.retryIn(0)}))}},e.prototype.setConnection=function(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()},e.prototype.abandonConnection=function(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}},e.prototype.updateState=function(t,e){var n=this.state;if(this.state=t,n!==t){var r=t;"connected"===r&&(r+=" with new socket ID "+e.socket_id),B.debug("State changed",n+" -> "+r),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}},e.prototype.shouldRetry=function(){return"connecting"===this.state||"connected"===this.state},e}(z),Lt=function(){function t(){this.channels={}}return t.prototype.add=function(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return xt.createEncryptedChannel(t,e,e.config.nacl);var n=dt("encryptedChannelSupport");throw new ut("Tried to subscribe to a private-encrypted- channel but no nacl implementation available. "+n)}if(0===t.indexOf("private-"))return xt.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return xt.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new st('Cannot create a channel with name "'+t+'".');return xt.createChannel(t,e)}(t,e)),this.channels[t]},t.prototype.all=function(){return function(t){var e=[];return k(t,(function(t){e.push(t)})),e}(this.channels)},t.prototype.find=function(t){return this.channels[t]},t.prototype.remove=function(t){var e=this.channels[t];return delete this.channels[t],e},t.prototype.disconnect=function(){k(this.channels,(function(t){t.disconnect()}))},t}();var xt={createChannels:function(){return new Lt},createConnectionManager:function(t,e){return new At(t,e)},createChannel:function(t,e){return new gt(t,e)},createPrivateChannel:function(t,e){return new bt(t,e)},createPresenceChannel:function(t,e){return new kt(t,e)},createEncryptedChannel:function(t,e,n){return new Ot(t,e,n)},createTimelineSender:function(t,e){return new rt(t,e)},createHandshake:function(t,e){return new nt(t,e)},createAssistantToTheTransportManager:function(t,e,n){return new $(t,e,n)}},jt=function(){function t(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return t.prototype.getAssistant=function(t){return xt.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},t.prototype.isAlive=function(){return this.livesLeft>0},t.prototype.reportDeath=function(){this.livesLeft-=1},t}(),Rt=function(){function t(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}return t.prototype.isSupported=function(){return A(this.strategies,m.method("isSupported"))},t.prototype.connect=function(t,e){var n=this,r=this.strategies,o=0,i=this.timeout,s=null,c=function(a,u){u?e(null,u):(o+=1,n.loop&&(o%=r.length),o0&&(o=new v(n.timeout,(function(){i.abort(),r(!0)}))),i=t.connect(e,(function(t,e){t&&o&&o.isRunning()&&!n.failFast||(o&&o.ensureAborted(),r(t,e))})),{abort:function(){o&&o.ensureAborted(),i.abort()},forceMinPriority:function(t){i.forceMinPriority(t)}}},t}(),It=function(){function t(t){this.strategies=t}return t.prototype.isSupported=function(){return A(this.strategies,m.method("isSupported"))},t.prototype.connect=function(t,e){return function(t,e,n){var r=T(t,(function(t,r,o,i){return t.connect(e,n(r,i))}));return{abort:function(){P(r,Dt)},forceMinPriority:function(t){P(r,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(r,o){n[t].error=r,r?function(t){return function(t,e){for(var n=0;n=m.now()){var i=this.transports[r.transport];i&&(this.timeline.info({cached:!0,transport:r.transport,latency:r.latency}),o.push(new Rt([i],{timeout:2*r.latency+1e3,failFast:!0})))}var s=m.now(),c=o.pop().connect(t,(function r(i,a){i?(Ht(n),o.length>0?(s=m.now(),c=o.pop().connect(t,r)):e(i)):(!function(t,e,n){var r=se.getLocalStorage();if(r)try{r[Ut(t)]=j({timestamp:m.now(),transport:e,latency:n})}catch(t){}}(n,a.transport.name,m.now()-s),e(null,a))}));return{abort:function(){c.abort()},forceMinPriority:function(e){t=e,c&&c.forceMinPriority(e)}}},t}();function Ut(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function Ht(t){var e=se.getLocalStorage();if(e)try{delete e[Ut(t)]}catch(t){}}var Mt=function(){function t(t,e){var n=e.delay;this.strategy=t,this.options={delay:n}}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,e){var n,r=this.strategy,o=new v(this.options.delay,(function(){n=r.connect(t,e)}));return{abort:function(){o.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}},t}(),zt=function(){function t(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}return t.prototype.isSupported=function(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()},t.prototype.connect=function(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)},t}(),Bt=function(){function t(t){this.strategy=t}return t.prototype.isSupported=function(){return this.strategy.isSupported()},t.prototype.connect=function(t,e){var n=this.strategy.connect(t,(function(t,r){r&&n.abort(),e(t,r)}));return n},t}();function qt(t){return function(){return t.isSupported()}}var Ft,Jt=function(t,e,n){var r={};function o(e,o,i,s,c){var a=n(t,e,o,i,s,c);return r[e]=a,a}var i,s=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),c=_({},s,{useTLS:!0}),a=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),u={loop:!0,timeout:15e3,timeoutLimit:6e4},h=new jt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),p=new jt({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=o("ws","ws",3,s,h),f=o("wss","ws",3,c,h),d=o("xhr_streaming","xhr_streaming",1,a,p),y=o("xhr_polling","xhr_polling",1,a),g=new Rt([l],u),v=new Rt([f],u),b=new Rt([d],u),m=new Rt([y],u),w=new Rt([new zt(qt(b),new It([b,new Mt(m,{delay:4e3})]),m)],u);return i=e.useTLS?new It([g,new Mt(w,{delay:2e3})]):new It([g,new Mt(v,{delay:2e3}),new Mt(w,{delay:5e3})]),new Nt(new Bt(new zt(qt(l),i,w)),r,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})},Wt=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Xt=function(t){function e(e,n,r){var o=t.call(this)||this;return o.hooks=e,o.method=n,o.url=r,o}return Wt(e,t),e.prototype.start=function(t){var e=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){e.close()},se.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)},e.prototype.close=function(){this.unloader&&(se.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},e.prototype.onChunk=function(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")},e.prototype.advanceBuffer=function(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null},e.prototype.isBufferTooLong=function(t){return this.position===t.length&&t.length>262144},e}(z);!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(Ft||(Ft={}));var Gt=Ft,Vt=1;function Yt(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+Vt++}function Qt(t){return se.randomInt(t)}var $t,Kt=function(){function t(t,e){this.hooks=t,this.session=Qt(1e3)+"/"+function(t){for(var e=[],n=0;n0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},ne={getDefaultStrategy:Jt,Transports:Q,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket:function(t){return this.createSocket(Zt,t)},createPollingSocket:function(t){return this.createSocket(te,t)},createSocket:function(t,e){return new Kt(t,e)},createXHR:function(t,e){return this.createRequest(ee,t,e)},createRequest:function(t,e,n){return new Xt(t,e,n)}},setup:function(t){t.ready()},getLocalStorage:function(){},getClientFeatures:function(){return C(E({ws:Q.ws},(function(t){return t.isSupported({})})))},getProtocol:function(){return"http:"},isXHRSupported:function(){return!0},createSocketRequest:function(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);throw"Cross-origin HTTP requests are not supported"},createXHR:function(){return new(this.getXHRAPI())},createWebSocket:function(t){return new(this.getWebSocketAPI())(t)},addUnloadListener:function(t){},removeUnloadListener:function(t){}},re=function(){var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),oe=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return re(e,t),e.prototype.isOnline=function(){return!0},e}(z)),ie=function(t,e,n,r,o){var i=new Headers;for(var s in i.set("Content-Type","application/x-www-form-urlencoded"),n.headers)i.set(s,n.headers[s]);if(null!=n.headersProvider){var c=n.headersProvider();for(var s in c)i.set(s,c[s])}var a=e,u=new Request(n.endpoint,{headers:i,body:a,credentials:"same-origin",method:"POST"});return fetch(u).then((function(t){var e=t.status;if(200===e)return t.text();throw new lt(e,"Could not get "+r.toString()+" info from your auth endpoint, status: "+e)})).then((function(t){var e;try{e=JSON.parse(t)}catch(e){throw new lt(200,"JSON returned from "+r.toString()+" endpoint was invalid, yet status code was 200. Data was: "+t)}o(null,e)})).catch((function(t){o(t,null)}))},se={getDefaultStrategy:ne.getDefaultStrategy,Transports:ne.Transports,setup:ne.setup,getProtocol:ne.getProtocol,isXHRSupported:ne.isXHRSupported,getLocalStorage:ne.getLocalStorage,createXHR:ne.createXHR,createWebSocket:ne.createWebSocket,addUnloadListener:ne.addUnloadListener,removeUnloadListener:ne.removeUnloadListener,transportConnectionInitializer:ne.transportConnectionInitializer,createSocketRequest:ne.createSocketRequest,HTTPFactory:ne.HTTPFactory,TimelineTransport:{name:"xhr",getAgent:function(t,e){return function(n,r){var o="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path,i=x(n);fetch(o+="/2?"+i).then((function(t){if(200!==t.status)throw"received "+t.status+" from stats.pusher.com";return t.json()})).then((function(e){var n=e.host;n&&(t.host=n)})).catch((function(t){B.debug("TimelineSender Error: ",t)}))}}},getAuthorizers:function(){return{ajax:ie}},getWebSocketAPI:function(){return WebSocket},getXHRAPI:function(){return XMLHttpRequest},getNetwork:function(){return oe},randomInt:function(t){return Math.floor((globalThis.crypto||globalThis.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)}};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}($t||($t={}));var ce=$t,ae=function(){function t(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}return t.prototype.log=function(t,e){t<=this.options.level&&(this.events.push(_({},e,{timestamp:m.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},t.prototype.error=function(t){this.log(ce.ERROR,t)},t.prototype.info=function(t){this.log(ce.INFO,t)},t.prototype.debug=function(t){this.log(ce.DEBUG,t)},t.prototype.isEmpty=function(){return 0===this.events.length},t.prototype.send=function(t,e){var n=this,r=_({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(r,(function(t,r){t||n.sent++,e&&e(t,r)})),!0},t.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},t}(),ue=function(){function t(t,e,n,r){this.name=t,this.priority=e,this.transport=n,this.options=r||{}}return t.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},t.prototype.connect=function(t,e){var n=this;if(!this.isSupported())return he(new pt,e);if(this.priority>>18&63),e+=this._encodeByte(i>>>12&63),e+=this._encodeByte(i>>>6&63),e+=this._encodeByte(i>>>0&63)}var s=t.length-n;if(s>0){i=t[n]<<16|(2===s?t[n+1]<<8:0);e+=this._encodeByte(i>>>18&63),e+=this._encodeByte(i>>>12&63),e+=2===s?this._encodeByte(i>>>6&63):this._paddingCharacter||"",e+=this._paddingCharacter||""}return e},t.prototype.maxDecodedLength=function(t){return this._paddingCharacter?t/4*3|0:(6*t+7)/8|0},t.prototype.decodedLength=function(t){return this.maxDecodedLength(t.length-this._getPaddingLength(t))},t.prototype.decode=function(t){if(0===t.length)return new Uint8Array(0);for(var e=this._getPaddingLength(t),n=t.length-e,i=new Uint8Array(this.maxDecodedLength(n)),s=0,r=0,o=0,a=0,c=0,h=0,u=0;r>>4,i[s++]=c<<4|h>>>2,i[s++]=h<<6|u,o|=256&a,o|=256&c,o|=256&h,o|=256&u;if(r>>4,o|=256&a,o|=256&c),r>>2,o|=256&h),r>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-15,e+=62-t>>>8&3,String.fromCharCode(e)},t.prototype._decodeChar=function(t){var e=256;return e+=(42-t&t-44)>>>8&-256+t-43+62,e+=(46-t&t-48)>>>8&-256+t-47+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},t.prototype._getPaddingLength=function(t){var e=0;if(this._paddingCharacter){for(var n=t.length-1;n>=0&&t[n]===this._paddingCharacter;n--)e++;if(t.length<4||e>2)throw new Error("Base64Coder: incorrect padding")}return e},t}();e.Coder=r;var o=new r;e.encode=function(t){return o.encode(t)},e.decode=function(t){return o.decode(t)};var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype._encodeByte=function(t){var e=t;return e+=65,e+=25-t>>>8&6,e+=51-t>>>8&-75,e+=61-t>>>8&-13,e+=62-t>>>8&49,String.fromCharCode(e)},e.prototype._decodeChar=function(t){var e=256;return e+=(44-t&t-46)>>>8&-256+t-45+62,e+=(94-t&t-96)>>>8&-256+t-95+63,e+=(47-t&t-58)>>>8&-256+t-48+52,e+=(64-t&t-91)>>>8&-256+t-65+0,e+=(96-t&t-123)>>>8&-256+t-97+26},e}(r);e.URLSafeCoder=a;var c=new a;e.encodeURLSafe=function(t){return c.encode(t)},e.decodeURLSafe=function(t){return c.decode(t)},e.encodedLength=function(t){return o.encodedLength(t)},e.maxDecodedLength=function(t){return o.maxDecodedLength(t)},e.decodedLength=function(t){return o.decodedLength(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="utf8: invalid source encoding";function s(t){for(var e=0,n=0;n=t.length-1)throw new Error("utf8: invalid string");n++,e+=4}}return e}e.encode=function(t){for(var e=new Uint8Array(s(t)),n=0,i=0;i>6,e[n++]=128|63&r):r<55296?(e[n++]=224|r>>12,e[n++]=128|r>>6&63,e[n++]=128|63&r):(i++,r=(1023&r)<<10,r|=1023&t.charCodeAt(i),r+=65536,e[n++]=240|r>>18,e[n++]=128|r>>12&63,e[n++]=128|r>>6&63,e[n++]=128|63&r)}return e},e.encodedLength=s,e.decode=function(t){for(var e=[],n=0;n=t.length)throw new Error(i);if(128!=(192&(o=t[++n])))throw new Error(i);s=(31&s)<<6|63&o,r=128}else if(s<240){if(n>=t.length-1)throw new Error(i);var o=t[++n],a=t[++n];if(128!=(192&o)||128!=(192&a))throw new Error(i);s=(15&s)<<12|(63&o)<<6|63&a,r=2048}else{if(!(s<248))throw new Error(i);if(n>=t.length-2)throw new Error(i);o=t[++n],a=t[++n];var c=t[++n];if(128!=(192&o)||128!=(192&a)||128!=(192&c))throw new Error(i);s=(15&s)<<18|(63&o)<<12|(63&a)<<6|63&c,r=65536}if(s=55296&&s<=57343)throw new Error(i);if(s>=65536){if(s>1114111)throw new Error(i);s-=65536,e.push(String.fromCharCode(55296|s>>10)),s=56320|1023&s}}e.push(String.fromCharCode(s))}return e.join("")}},function(t,e,n){t.exports=n(3).default},function(t,e,n){"use strict";n.r(e);for(var i=String.fromCharCode,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={},o=0,a=s.length;o>>6)+i(128|63&e):i(224|e>>>12&15)+i(128|e>>>6&63)+i(128|63&e)},h=function(t){return t.replace(/[^\x00-\x7F]/g,c)},u=function(t){var e=[0,2,1][t.length%3],n=t.charCodeAt(0)<<16|(t.length>1?t.charCodeAt(1):0)<<8|(t.length>2?t.charCodeAt(2):0);return[s.charAt(n>>>18),s.charAt(n>>>12&63),e>=2?"=":s.charAt(n>>>6&63),e>=1?"=":s.charAt(63&n)].join("")},l=self.btoa||function(t){return t.replace(/[\s\S]{1,3}/g,u)};var d=class{constructor(t,e,n,i){this.clear=e,this.timer=t(()=>{this.timer&&(this.timer=i(this.timer))},n)}isRunning(){return null!==this.timer}ensureAborted(){this.timer&&(this.clear(this.timer),this.timer=null)}};function p(t){self.clearTimeout(t)}function f(t){self.clearInterval(t)}class g extends d{constructor(t,e){super(setTimeout,p,t,(function(t){return e(),null}))}}class b extends d{constructor(t,e){super(setInterval,f,t,(function(t){return e(),t}))}}var m={now:()=>Date.now?Date.now():(new Date).valueOf(),defer:t=>new g(0,t),method(t,...e){var n=Array.prototype.slice.call(arguments,1);return function(e){return e[t].apply(e,n.concat(arguments))}}};function v(t,...e){for(var n=0;ne!==t),this):(this.global_callbacks=[],this)}unbind_all(){return this.unbind(),this.unbind_global(),this}emit(t,e,n){for(var i=0;i0)for(i=0;i{self.console&&self.console.log&&self.console.log(t)}}debug(...t){this.log(this.globalLog,t)}warn(...t){this.log(this.globalLogWarn,t)}error(...t){this.log(this.globalLogError,t)}globalLogWarn(t){self.console&&self.console.warn?self.console.warn(t):this.globalLog(t)}globalLogError(t){self.console&&self.console.error?self.console.error(t):this.globalLogWarn(t)}log(t,...e){var n=y.apply(this,arguments);if(Ee.log)Ee.log(n);else if(Ee.logToConsole){t.bind(this)(n)}}};class z extends H{constructor(t,e,n,i,s){super(),this.initialize=ae.transportConnectionInitializer,this.hooks=t,this.name=e,this.priority=n,this.key=i,this.options=s,this.state="new",this.timeline=s.timeline,this.activityTimeout=s.activityTimeout,this.id=this.timeline.generateUniqueID()}handlesActivityChecks(){return Boolean(this.hooks.handlesActivityChecks)}supportsPing(){return Boolean(this.hooks.supportsPing)}connect(){if(this.socket||"initialized"!==this.state)return!1;var t=this.hooks.urls.getInitial(this.key,this.options);try{this.socket=this.hooks.getSocket(t,this.options)}catch(t){return m.defer(()=>{this.onError(t),this.changeState("closed")}),!1}return this.bindListeners(),M.debug("Connecting",{transport:this.name,url:t}),this.changeState("connecting"),!0}close(){return!!this.socket&&(this.socket.close(),!0)}send(t){return"open"===this.state&&(m.defer(()=>{this.socket&&this.socket.send(t)}),!0)}ping(){"open"===this.state&&this.supportsPing()&&this.socket.ping()}onOpen(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState("open"),this.socket.onopen=void 0}onError(t){this.emit("error",{type:"WebSocketError",error:t}),this.timeline.error(this.buildTimelineMessage({error:t.toString()}))}onClose(t){t?this.changeState("closed",{code:t.code,reason:t.reason,wasClean:t.wasClean}):this.changeState("closed"),this.unbindListeners(),this.socket=void 0}onMessage(t){this.emit("message",t)}onActivity(){this.emit("activity")}bindListeners(){this.socket.onopen=()=>{this.onOpen()},this.socket.onerror=t=>{this.onError(t)},this.socket.onclose=t=>{this.onClose(t)},this.socket.onmessage=t=>{this.onMessage(t)},this.supportsPing()&&(this.socket.onactivity=()=>{this.onActivity()})}unbindListeners(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))}changeState(t,e){this.state=t,this.timeline.info(this.buildTimelineMessage({state:t,params:e})),this.emit(t,e)}buildTimelineMessage(t){return v({cid:this.id},t)}}class B{constructor(t){this.hooks=t}isSupported(t){return this.hooks.isSupported(t)}createConnection(t,e,n,i){return new z(this.hooks,t,e,n,i)}}var q=new B({urls:D,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return Boolean(ae.getWebSocketAPI())},isSupported:function(){return Boolean(ae.getWebSocketAPI())},getSocket:function(t){return ae.createWebSocket(t)}}),F={urls:j,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},$=v({getSocket:function(t){return ae.HTTPFactory.createStreamingSocket(t)}},F),J=v({getSocket:function(t){return ae.HTTPFactory.createPollingSocket(t)}},F),W={isSupported:function(){return ae.isXHRSupported()}},X={ws:q,xhr_streaming:new B(v({},$,W)),xhr_polling:new B(v({},J,W))};class G{constructor(t,e,n){this.manager=t,this.transport=e,this.minPingDelay=n.minPingDelay,this.maxPingDelay=n.maxPingDelay,this.pingDelay=void 0}createConnection(t,e,n,i){i=v({},i,{activityTimeout:this.pingDelay});var s=this.transport.createConnection(t,e,n,i),r=null,o=function(){s.unbind("open",o),s.bind("closed",a),r=m.now()},a=t=>{if(s.unbind("closed",a),1002===t.code||1003===t.code)this.manager.reportDeath();else if(!t.wasClean&&r){var e=m.now()-r;e<2*this.maxPingDelay&&(this.manager.reportDeath(),this.pingDelay=Math.max(e/2,this.minPingDelay))}};return s.bind("open",o),s}isSupported(t){return this.manager.isAlive()&&this.transport.isSupported(t)}}const V={decodeMessage:function(t){try{var e=JSON.parse(t.data),n=e.data;if("string"==typeof n)try{n=JSON.parse(e.data)}catch(t){}var i={event:e.event,channel:e.channel,data:n};return e.user_id&&(i.user_id=e.user_id),i}catch(e){throw{type:"MessageParseError",error:e,data:t.data}}},encodeMessage:function(t){return JSON.stringify(t)},processHandshake:function(t){var e=V.decodeMessage(t);if("pusher:connection_established"===e.event){if(!e.data.activity_timeout)throw"No activity timeout specified in handshake";return{action:"connected",id:e.data.socket_id,activityTimeout:1e3*e.data.activity_timeout}}if("pusher:error"===e.event)return{action:this.getCloseAction(e.data),error:this.getCloseError(e.data)};throw"Invalid handshake"},getCloseAction:function(t){return t.code<4e3?t.code>=1002&&t.code<=1004?"backoff":null:4e3===t.code?"tls_only":t.code<4100?"refused":t.code<4200?"backoff":t.code<4300?"retry":"refused"},getCloseError:function(t){return 1e3!==t.code&&1001!==t.code?{type:"PusherError",data:{code:t.code,message:t.reason||t.message}}:null}};var Y=V;class Q extends H{constructor(t,e){super(),this.id=t,this.transport=e,this.activityTimeout=e.activityTimeout,this.bindListeners()}handlesActivityChecks(){return this.transport.handlesActivityChecks()}send(t){return this.transport.send(t)}send_event(t,e,n){var i={event:t,data:e};return n&&(i.channel=n),M.debug("Event sent",i),this.send(Y.encodeMessage(i))}ping(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})}close(){this.transport.close()}bindListeners(){var t={message:t=>{var e;try{e=Y.decodeMessage(t)}catch(e){this.emit("error",{type:"MessageParseError",error:e,data:t.data})}if(void 0!==e){switch(M.debug("Event recd",e),e.event){case"pusher:error":this.emit("error",{type:"PusherError",data:e.data});break;case"pusher:ping":this.emit("ping");break;case"pusher:pong":this.emit("pong")}this.emit("message",e)}},activity:()=>{this.emit("activity")},error:t=>{this.emit("error",t)},closed:t=>{e(),t&&t.code&&this.handleCloseEvent(t),this.transport=null,this.emit("closed")}},e=()=>{_(t,(t,e)=>{this.transport.unbind(e,t)})};_(t,(t,e)=>{this.transport.bind(e,t)})}handleCloseEvent(t){var e=Y.getCloseAction(t),n=Y.getCloseError(t);n&&this.emit("error",n),e&&this.emit(e,{action:e,error:n})}}class K{constructor(t,e){this.transport=t,this.callback=e,this.bindListeners()}close(){this.unbindListeners(),this.transport.close()}bindListeners(){this.onMessage=t=>{var e;this.unbindListeners();try{e=Y.processHandshake(t)}catch(t){return this.finish("error",{error:t}),void this.transport.close()}"connected"===e.action?this.finish("connected",{connection:new Q(e.id,this.transport),activityTimeout:e.activityTimeout}):(this.finish(e.action,{error:e.error}),this.transport.close())},this.onClosed=t=>{this.unbindListeners();var e=Y.getCloseAction(t)||"backoff",n=Y.getCloseError(t);this.finish(e,{error:n})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)}unbindListeners(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)}finish(t,e){this.callback(v({transport:this.transport,action:t},e))}}class Z{constructor(t,e){this.timeline=t,this.options=e||{}}send(t,e){this.timeline.isEmpty()||this.timeline.send(ae.TimelineTransport.getAgent(this,t),e)}}class tt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class et extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}Error;class nt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class it extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class st extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class rt extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class ot extends Error{constructor(t){super(t),Object.setPrototypeOf(this,new.target.prototype)}}class at extends Error{constructor(t,e){super(e),this.status=t,Object.setPrototypeOf(this,new.target.prototype)}}const ct={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}};var ht=function(t){const e=ct.urls[t];if(!e)return"";let n;return e.fullUrl?n=e.fullUrl:e.path&&(n=ct.baseUrl+e.path),n?"See: "+n:""};class ut extends H{constructor(t,e){super((function(e,n){M.debug("No callbacks on "+t+" for "+e)})),this.name=t,this.pusher=e,this.subscribed=!1,this.subscriptionPending=!1,this.subscriptionCancelled=!1}authorize(t,e){return e(null,{auth:""})}trigger(t,e){if(0!==t.indexOf("client-"))throw new tt("Event '"+t+"' does not start with 'client-'");if(!this.subscribed){var n=ht("triggeringClientEvents");M.warn("Client event triggered before channel 'subscription_succeeded' event . "+n)}return this.pusher.send_event(t,e,this.name)}disconnect(){this.subscribed=!1,this.subscriptionPending=!1}handleEvent(t){var e=t.event,n=t.data;if("pusher_internal:subscription_succeeded"===e)this.handleSubscriptionSucceededEvent(t);else if("pusher_internal:subscription_count"===e)this.handleSubscriptionCountEvent(t);else if(0!==e.indexOf("pusher_internal:")){this.emit(e,n,{})}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",t.data)}handleSubscriptionCountEvent(t){t.data.subscription_count&&(this.subscriptionCount=t.data.subscription_count),this.emit("pusher:subscription_count",t.data)}subscribe(){this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,(t,e)=>{t?(this.subscriptionPending=!1,M.error(t.toString()),this.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:t.message},t instanceof at?{status:t.status}:{}))):this.pusher.send_event("pusher:subscribe",{auth:e.auth,channel_data:e.channel_data,channel:this.name})}))}unsubscribe(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})}cancelSubscription(){this.subscriptionCancelled=!0}reinstateSubscription(){this.subscriptionCancelled=!1}}class lt extends ut{authorize(t,e){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:t},e)}}class dt{constructor(){this.reset()}get(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null}each(t){_(this.members,(e,n)=>{t(this.get(n))})}setMyID(t){this.myID=t}onSubscription(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)}addMember(t){return null===this.get(t.user_id)&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)}removeMember(t){var e=this.get(t.user_id);return e&&(delete this.members[t.user_id],this.count--),e}reset(){this.members={},this.count=0,this.myID=null,this.me=null}}var pt=function(t,e,n,i){return new(n||(n=Promise))((function(s,r){function o(t){try{c(i.next(t))}catch(t){r(t)}}function a(t){try{c(i.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}c((i=i.apply(t,e||[])).next())}))};class ft extends lt{constructor(t,e){super(t,e),this.members=new dt}authorize(t,e){super.authorize(t,(t,n)=>pt(this,void 0,void 0,(function*(){if(!t)if(null!=(n=n).channel_data){var i=JSON.parse(n.channel_data);this.members.setMyID(i.user_id)}else{if(yield this.pusher.user.signinDonePromise,null==this.pusher.user.user_data){let t=ht("authorizationEndpoint");return M.error(`Invalid auth response for channel '${this.name}', expected 'channel_data' field. ${t}, or the user should be signed in.`),void e("Invalid auth response")}this.members.setMyID(this.pusher.user.user_data.id)}e(t,n)})))}handleEvent(t){var e=t.event;if(0===e.indexOf("pusher_internal:"))this.handleInternalEvent(t);else{var n=t.data,i={};t.user_id&&(i.user_id=t.user_id),this.emit(e,n,i)}}handleInternalEvent(t){var e=t.event,n=t.data;switch(e){case"pusher_internal:subscription_succeeded":this.handleSubscriptionSucceededEvent(t);break;case"pusher_internal:subscription_count":this.handleSubscriptionCountEvent(t);break;case"pusher_internal:member_added":var i=this.members.addMember(n);this.emit("pusher:member_added",i);break;case"pusher_internal:member_removed":var s=this.members.removeMember(n);s&&this.emit("pusher:member_removed",s)}}handleSubscriptionSucceededEvent(t){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(t.data),this.emit("pusher:subscription_succeeded",this.members))}disconnect(){this.members.reset(),super.disconnect()}}var gt=n(1),bt=n(0);class mt extends lt{constructor(t,e,n){super(t,e),this.key=null,this.nacl=n}authorize(t,e){super.authorize(t,(t,n)=>{if(t)return void e(t,n);let i=n.shared_secret;i?(this.key=Object(bt.decode)(i),delete n.shared_secret,e(null,n)):e(new Error("No shared_secret key in auth payload for encrypted channel: "+this.name),null)})}trigger(t,e){throw new st("Client events are not currently supported for encrypted channels")}handleEvent(t){var e=t.event,n=t.data;0!==e.indexOf("pusher_internal:")&&0!==e.indexOf("pusher:")?this.handleEncryptedEvent(e,n):super.handleEvent(t)}handleEncryptedEvent(t,e){if(!this.key)return void M.debug("Received encrypted event before key has been retrieved from the authEndpoint");if(!e.ciphertext||!e.nonce)return void M.error("Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: "+e);let n=Object(bt.decode)(e.ciphertext);if(n.length{e?M.error(`Failed to make a request to the authEndpoint: ${r}. Unable to fetch new key, so dropping encrypted event`):(s=this.nacl.secretbox.open(n,i,this.key),null!==s?this.emit(t,this.getDataToEmit(s)):M.error("Failed to decrypt event with new key. Dropping encrypted event"))});this.emit(t,this.getDataToEmit(s))}getDataToEmit(t){let e=Object(gt.decode)(t);try{return JSON.parse(e)}catch(t){return e}}}class vt extends H{constructor(t,e){super(),this.state="initialized",this.connection=null,this.key=t,this.options=e,this.timeline=this.options.timeline,this.usingTLS=this.options.useTLS,this.errorCallbacks=this.buildErrorCallbacks(),this.connectionCallbacks=this.buildConnectionCallbacks(this.errorCallbacks),this.handshakeCallbacks=this.buildHandshakeCallbacks(this.errorCallbacks);var n=ae.getNetwork();n.bind("online",()=>{this.timeline.info({netinfo:"online"}),"connecting"!==this.state&&"unavailable"!==this.state||this.retryIn(0)}),n.bind("offline",()=>{this.timeline.info({netinfo:"offline"}),this.connection&&this.sendActivityCheck()}),this.updateStrategy()}connect(){this.connection||this.runner||(this.strategy.isSupported()?(this.updateState("connecting"),this.startConnecting(),this.setUnavailableTimer()):this.updateState("failed"))}send(t){return!!this.connection&&this.connection.send(t)}send_event(t,e,n){return!!this.connection&&this.connection.send_event(t,e,n)}disconnect(){this.disconnectInternally(),this.updateState("disconnected")}isUsingTLS(){return this.usingTLS}startConnecting(){var t=(e,n)=>{e?this.runner=this.strategy.connect(0,t):"error"===n.action?(this.emit("error",{type:"HandshakeError",error:n.error}),this.timeline.error({handshakeError:n.error})):(this.abortConnecting(),this.handshakeCallbacks[n.action](n))};this.runner=this.strategy.connect(0,t)}abortConnecting(){this.runner&&(this.runner.abort(),this.runner=null)}disconnectInternally(){(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection)&&this.abandonConnection().close()}updateStrategy(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})}retryIn(t){this.timeline.info({action:"retry",delay:t}),t>0&&this.emit("connecting_in",Math.round(t/1e3)),this.retryTimer=new g(t||0,()=>{this.disconnectInternally(),this.connect()})}clearRetryTimer(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)}setUnavailableTimer(){this.unavailableTimer=new g(this.options.unavailableTimeout,()=>{this.updateState("unavailable")})}clearUnavailableTimer(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()}sendActivityCheck(){this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new g(this.options.pongTimeout,()=>{this.timeline.error({pong_timed_out:this.options.pongTimeout}),this.retryIn(0)})}resetActivityCheck(){this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new g(this.activityTimeout,()=>{this.sendActivityCheck()}))}stopActivityCheck(){this.activityTimer&&this.activityTimer.ensureAborted()}buildConnectionCallbacks(t){return v({},t,{message:t=>{this.resetActivityCheck(),this.emit("message",t)},ping:()=>{this.send_event("pusher:pong",{})},activity:()=>{this.resetActivityCheck()},error:t=>{this.emit("error",t)},closed:()=>{this.abandonConnection(),this.shouldRetry()&&this.retryIn(1e3)}})}buildHandshakeCallbacks(t){return v({},t,{connected:t=>{this.activityTimeout=Math.min(this.options.activityTimeout,t.activityTimeout,t.connection.activityTimeout||1/0),this.clearUnavailableTimer(),this.setConnection(t.connection),this.socket_id=this.connection.id,this.updateState("connected",{socket_id:this.socket_id})}})}buildErrorCallbacks(){let t=t=>e=>{e.error&&this.emit("error",{type:"WebSocketError",error:e.error}),t(e)};return{tls_only:t(()=>{this.usingTLS=!0,this.updateStrategy(),this.retryIn(0)}),refused:t(()=>{this.disconnect()}),backoff:t(()=>{this.retryIn(1e3)}),retry:t(()=>{this.retryIn(0)})}}setConnection(t){for(var e in this.connection=t,this.connectionCallbacks)this.connection.bind(e,this.connectionCallbacks[e]);this.resetActivityCheck()}abandonConnection(){if(this.connection){for(var t in this.stopActivityCheck(),this.connectionCallbacks)this.connection.unbind(t,this.connectionCallbacks[t]);var e=this.connection;return this.connection=null,e}}updateState(t,e){var n=this.state;if(this.state=t,n!==t){var i=t;"connected"===i&&(i+=" with new socket ID "+e.socket_id),M.debug("State changed",n+" -> "+i),this.timeline.info({state:t,params:e}),this.emit("state_change",{previous:n,current:t}),this.emit(t,e)}}shouldRetry(){return"connecting"===this.state||"connected"===this.state}}class yt{constructor(){this.channels={}}add(t,e){return this.channels[t]||(this.channels[t]=function(t,e){if(0===t.indexOf("private-encrypted-")){if(e.config.nacl)return St.createEncryptedChannel(t,e,e.config.nacl);let n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",i=ht("encryptedChannelSupport");throw new st(`${n}. ${i}`)}if(0===t.indexOf("private-"))return St.createPrivateChannel(t,e);if(0===t.indexOf("presence-"))return St.createPresenceChannel(t,e);if(0===t.indexOf("#"))throw new et('Cannot create a channel with name "'+t+'".');return St.createChannel(t,e)}(t,e)),this.channels[t]}all(){return function(t){var e=[];return _(t,(function(t){e.push(t)})),e}(this.channels)}find(t){return this.channels[t]}remove(t){var e=this.channels[t];return delete this.channels[t],e}disconnect(){_(this.channels,(function(t){t.disconnect()}))}}var St={createChannels:()=>new yt,createConnectionManager:(t,e)=>new vt(t,e),createChannel:(t,e)=>new ut(t,e),createPrivateChannel:(t,e)=>new lt(t,e),createPresenceChannel:(t,e)=>new ft(t,e),createEncryptedChannel:(t,e,n)=>new mt(t,e,n),createTimelineSender:(t,e)=>new Z(t,e),createHandshake:(t,e)=>new K(t,e),createAssistantToTheTransportManager:(t,e,n)=>new G(t,e,n)};class _t{constructor(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}getAssistant(t){return St.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})}isAlive(){return this.livesLeft>0}reportDeath(){this.livesLeft-=1}}class wt{constructor(t,e){this.strategies=t,this.loop=Boolean(e.loop),this.failFast=Boolean(e.failFast),this.timeout=e.timeout,this.timeoutLimit=e.timeoutLimit}isSupported(){return O(this.strategies,m.method("isSupported"))}connect(t,e){var n=this.strategies,i=0,s=this.timeout,r=null,o=(a,c)=>{c?e(null,c):(i+=1,this.loop&&(i%=n.length),i0&&(s=new g(n.timeout,(function(){r.abort(),i(!0)}))),r=t.connect(e,(function(t,e){t&&s&&s.isRunning()&&!n.failFast||(s&&s.ensureAborted(),i(t,e))})),{abort:function(){s&&s.ensureAborted(),r.abort()},forceMinPriority:function(t){r.forceMinPriority(t)}}}}class Ct{constructor(t){this.strategies=t}isSupported(){return O(this.strategies,m.method("isSupported"))}connect(t,e){return function(t,e,n){var i=k(t,(function(t,i,s,r){return t.connect(e,n(i,r))}));return{abort:function(){C(i,kt)},forceMinPriority:function(t){C(i,(function(e){e.forceMinPriority(t)}))}}}(this.strategies,t,(function(t,n){return function(i,s){n[t].error=i,i?function(t){return function(t,e){for(var n=0;n=m.now()){var r=this.transports[i.transport];r&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),s.push(new wt([r],{timeout:2*i.latency+1e3,failFast:!0})))}var o=m.now(),a=s.pop().connect(t,(function i(r,c){r?(Ot(n),s.length>0?(o=m.now(),a=s.pop().connect(t,i)):e(r)):(!function(t,e,n){var i=ae.getLocalStorage();if(i)try{i[Pt(t)]=L({timestamp:m.now(),transport:e,latency:n})}catch(t){}}(n,c.transport.name,m.now()-o),e(null,c))}));return{abort:function(){a.abort()},forceMinPriority:function(e){t=e,a&&a.forceMinPriority(e)}}}}function Pt(t){return"pusherTransport"+(t?"TLS":"NonTLS")}function Ot(t){var e=ae.getLocalStorage();if(e)try{delete e[Pt(t)]}catch(t){}}class Et{constructor(t,{delay:e}){this.strategy=t,this.options={delay:e}}isSupported(){return this.strategy.isSupported()}connect(t,e){var n,i=this.strategy,s=new g(this.options.delay,(function(){n=i.connect(t,e)}));return{abort:function(){s.ensureAborted(),n&&n.abort()},forceMinPriority:function(e){t=e,n&&n.forceMinPriority(e)}}}}class xt{constructor(t,e,n){this.test=t,this.trueBranch=e,this.falseBranch=n}isSupported(){return(this.test()?this.trueBranch:this.falseBranch).isSupported()}connect(t,e){return(this.test()?this.trueBranch:this.falseBranch).connect(t,e)}}class Lt{constructor(t){this.strategy=t}isSupported(){return this.strategy.isSupported()}connect(t,e){var n=this.strategy.connect(t,(function(t,i){i&&n.abort(),e(t,i)}));return n}}function At(t){return function(){return t.isSupported()}}var Rt=function(t,e,n){var i={};function s(e,s,r,o,a){var c=n(t,e,s,r,o,a);return i[e]=c,c}var r,o=Object.assign({},e,{hostNonTLS:t.wsHost+":"+t.wsPort,hostTLS:t.wsHost+":"+t.wssPort,httpPath:t.wsPath}),a=v({},o,{useTLS:!0}),c=Object.assign({},e,{hostNonTLS:t.httpHost+":"+t.httpPort,hostTLS:t.httpHost+":"+t.httpsPort,httpPath:t.httpPath}),h={loop:!0,timeout:15e3,timeoutLimit:6e4},u=new _t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),l=new _t({lives:2,minPingDelay:1e4,maxPingDelay:t.activityTimeout}),d=s("ws","ws",3,o,u),p=s("wss","ws",3,a,u),f=s("xhr_streaming","xhr_streaming",1,c,l),g=s("xhr_polling","xhr_polling",1,c),b=new wt([d],h),m=new wt([p],h),y=new wt([f],h),S=new wt([g],h),_=new wt([new xt(At(y),new Ct([y,new Et(S,{delay:4e3})]),S)],h);return r=e.useTLS?new Ct([b,new Et(_,{delay:2e3})]):new Ct([b,new Et(m,{delay:2e3}),new Et(_,{delay:5e3})]),new Tt(new Lt(new xt(At(d),r,_)),i,{ttl:18e5,timeline:e.timeline,useTLS:e.useTLS})};class It extends H{constructor(t,e,n){super(),this.hooks=t,this.method=e,this.url=n}start(t){this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=()=>{this.close()},ae.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(t)}close(){this.unloader&&(ae.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)}onChunk(t,e){for(;;){var n=this.advanceBuffer(e);if(!n)break;this.emit("chunk",{status:t,data:n})}this.isBufferTooLong(e)&&this.emit("buffer_too_long")}advanceBuffer(t){var e=t.slice(this.position),n=e.indexOf("\n");return-1!==n?(this.position+=n+1,e.slice(0,n)):null}isBufferTooLong(t){return this.position===t.length&&t.length>262144}}var Dt;!function(t){t[t.CONNECTING=0]="CONNECTING",t[t.OPEN=1]="OPEN",t[t.CLOSED=3]="CLOSED"}(Dt||(Dt={}));var jt=Dt,Nt=1;function Ut(t){var e=-1===t.indexOf("?")?"?":"&";return t+e+"t="+ +new Date+"&n="+Nt++}function Ht(t){return ae.randomInt(t)}var Mt=class{constructor(t,e){this.hooks=t,this.session=Ht(1e3)+"/"+function(t){for(var e=[],n=0;n{this.onChunk(t)}),this.stream.bind("finished",t=>{this.hooks.onFinished(this,t)}),this.stream.bind("buffer_too_long",()=>{this.reconnect()});try{this.stream.start()}catch(t){m.defer(()=>{this.onError(t),this.onClose(1006,"Could not start streaming",!1)})}}closeStream(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)}},zt={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr_streaming"+t.queryString},onHeartbeat:function(t){t.sendRaw("[]")},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){t.onClose(1006,"Connection interrupted ("+e+")",!1)}},Bt={getReceiveURL:function(t,e){return t.base+"/"+e+"/xhr"+t.queryString},onHeartbeat:function(){},sendHeartbeat:function(t){t.sendRaw("[]")},onFinished:function(t,e){200===e?t.reconnect():t.onClose(1006,"Connection interrupted ("+e+")",!1)}},qt={getRequest:function(t){var e=new(ae.getXHRAPI());return e.onreadystatechange=e.onprogress=function(){switch(e.readyState){case 3:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText);break;case 4:e.responseText&&e.responseText.length>0&&t.onChunk(e.status,e.responseText),t.emit("finished",e.status),t.close()}},e},abortRequest:function(t){t.onreadystatechange=null,t.abort()}},Ft={getDefaultStrategy:Rt,Transports:X,transportConnectionInitializer:function(){this.timeline.info(this.buildTimelineMessage({transport:this.name+(this.options.useTLS?"s":"")})),this.hooks.isInitialized()?this.changeState("initialized"):this.onClose()},HTTPFactory:{createStreamingSocket(t){return this.createSocket(zt,t)},createPollingSocket(t){return this.createSocket(Bt,t)},createSocket:(t,e)=>new Mt(t,e),createXHR(t,e){return this.createRequest(qt,t,e)},createRequest:(t,e,n)=>new It(t,e,n)},setup(t){t.ready()},getLocalStorage(){},getClientFeatures:()=>w(P({ws:X.ws},(function(t){return t.isSupported({})}))),getProtocol:()=>"http:",isXHRSupported:()=>!0,createSocketRequest(t,e){if(this.isXHRSupported())return this.HTTPFactory.createXHR(t,e);throw"Cross-origin HTTP requests are not supported"},createXHR(){return new(this.getXHRAPI())},createWebSocket(t){return new(this.getWebSocketAPI())(t)},addUnloadListener(t){},removeUnloadListener(t){}};var $t=new class extends H{isOnline(){return!0}},Jt=function(t,e,n,i,s){var r=new Headers;for(var o in r.set("Content-Type","application/x-www-form-urlencoded"),n.headers)r.set(o,n.headers[o]);if(null!=n.headersProvider){const t=n.headersProvider();for(var o in t)r.set(o,t[o])}var a=e,c=new Request(n.endpoint,{headers:r,body:a,credentials:"same-origin",method:"POST"});return fetch(c).then(t=>{let{status:e}=t;if(200===e)return t.text();throw new at(e,`Could not get ${i.toString()} info from your auth endpoint, status: ${e}`)}).then(t=>{let e;try{e=JSON.parse(t)}catch(e){throw new at(200,`JSON returned from ${i.toString()} endpoint was invalid, yet status code was 200. Data was: ${t}`)}s(null,e)}).catch(t=>{s(t,null)})},Wt={name:"xhr",getAgent:function(t,e){return function(n,i){var s="http"+(e?"s":"")+"://"+(t.host||t.options.host)+t.options.path,r=x(n);fetch(s+="/2?"+r).then(t=>{if(200!==t.status)throw`received ${t.status} from stats.pusher.com`;return t.json()}).then(({host:e})=>{e&&(t.host=e)}).catch(t=>{M.debug("TimelineSender Error: ",t)})}}};const{getDefaultStrategy:Xt,Transports:Gt,setup:Vt,getProtocol:Yt,isXHRSupported:Qt,getLocalStorage:Kt,createXHR:Zt,createWebSocket:te,addUnloadListener:ee,removeUnloadListener:ne,transportConnectionInitializer:ie,createSocketRequest:se,HTTPFactory:re}=Ft;var oe,ae={getDefaultStrategy:Xt,Transports:Gt,setup:Vt,getProtocol:Yt,isXHRSupported:Qt,getLocalStorage:Kt,createXHR:Zt,createWebSocket:te,addUnloadListener:ee,removeUnloadListener:ne,transportConnectionInitializer:ie,createSocketRequest:se,HTTPFactory:re,TimelineTransport:Wt,getAuthorizers:()=>({ajax:Jt}),getWebSocketAPI:()=>WebSocket,getXHRAPI:()=>XMLHttpRequest,getNetwork:()=>$t,randomInt:t=>Math.floor((globalThis.crypto||globalThis.msCrypto).getRandomValues(new Uint32Array(1))[0]/Math.pow(2,32)*t)};!function(t){t[t.ERROR=3]="ERROR",t[t.INFO=6]="INFO",t[t.DEBUG=7]="DEBUG"}(oe||(oe={}));var ce=oe;class he{constructor(t,e,n){this.key=t,this.session=e,this.events=[],this.options=n||{},this.sent=0,this.uniqueID=0}log(t,e){t<=this.options.level&&(this.events.push(v({},e,{timestamp:m.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())}error(t){this.log(ce.ERROR,t)}info(t){this.log(ce.INFO,t)}debug(t){this.log(ce.DEBUG,t)}isEmpty(){return 0===this.events.length}send(t,e){var n=v({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(n,(t,n)=>{t||this.sent++,e&&e(t,n)}),!0}generateUniqueID(){return this.uniqueID++,this.uniqueID}}class ue{constructor(t,e,n,i){this.name=t,this.priority=e,this.transport=n,this.options=i||{}}isSupported(){return this.transport.isSupported({useTLS:this.options.useTLS})}connect(t,e){if(!this.isSupported())return le(new ot,e);if(this.priority{n||(h(),s?s.close():i.close())},forceMinPriority:t=>{n||this.priority{if(void 0===ae.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const i=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var i in e.params)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e.params[i]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var i in t)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(t[i])}return n})(e,t);ae.getAuthorizers()[t.transport](ae,i,t,pe.UserAuthentication,n)}};var me=t=>{if(void 0===ae.getAuthorizers()[t.transport])throw`'${t.transport}' is not a recognized auth transport`;return(e,n)=>{const i=((t,e)=>{var n="socket_id="+encodeURIComponent(t.socketId);for(var i in n+="&channel_name="+encodeURIComponent(t.channelName),e.params)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e.params[i]);if(null!=e.paramsProvider){let t=e.paramsProvider();for(var i in t)n+="&"+encodeURIComponent(i)+"="+encodeURIComponent(t[i])}return n})(e,t);ae.getAuthorizers()[t.transport](ae,i,t,pe.ChannelAuthorization,n)}};function ve(t){return t.httpHost?t.httpHost:t.cluster?`sockjs-${t.cluster}.pusher.com`:A.httpHost}function ye(t){return t.wsHost?t.wsHost:`ws-${t.cluster}.pusher.com`}function Se(t){return"https:"===ae.getProtocol()||!1!==t.forceTLS}function _e(t){return"enableStats"in t?t.enableStats:"disableStats"in t&&!t.disableStats}function we(t){const e=Object.assign(Object.assign({},A.userAuthentication),t.userAuthentication);return"customHandler"in e&&null!=e.customHandler?e.customHandler:be(e)}function Ce(t,e){const n=function(t,e){let n;return"channelAuthorization"in t?n=Object.assign(Object.assign({},A.channelAuthorization),t.channelAuthorization):(n={transport:t.authTransport||A.authTransport,endpoint:t.authEndpoint||A.authEndpoint},"auth"in t&&("params"in t.auth&&(n.params=t.auth.params),"headers"in t.auth&&(n.headers=t.auth.headers)),"authorizer"in t&&(n.customHandler=((t,e,n)=>{const i={authTransport:e.transport,authEndpoint:e.endpoint,auth:{params:e.params,headers:e.headers}};return(e,s)=>{const r=t.channel(e.channelName);n(r,i).authorize(e.socketId,s)}})(e,n,t.authorizer))),n}(t,e);return"customHandler"in n&&null!=n.customHandler?n.customHandler:me(n)}class ke extends H{constructor(t){super((function(t,e){M.debug("No callbacks on watchlist events for "+t)})),this.pusher=t,this.bindWatchlistInternalEvent()}handleEvent(t){t.data.events.forEach(t=>{this.emit(t.name,t)})}bindWatchlistInternalEvent(){this.pusher.connection.bind("message",t=>{"pusher_internal:watchlist_events"===t.event&&this.handleEvent(t)})}}var Te=function(){let t,e;return{promise:new Promise((n,i)=>{t=n,e=i}),resolve:t,reject:e}};class Pe extends H{constructor(t){super((function(t,e){M.debug("No callbacks on user for "+t)})),this.signin_requested=!1,this.user_data=null,this.serverToUserChannel=null,this.signinDonePromise=null,this._signinDoneResolve=null,this._onAuthorize=(t,e)=>{if(t)return M.warn("Error during signin: "+t),void this._cleanup();this.pusher.send_event("pusher:signin",{auth:e.auth,user_data:e.user_data})},this.pusher=t,this.pusher.connection.bind("state_change",({previous:t,current:e})=>{"connected"!==t&&"connected"===e&&this._signin(),"connected"===t&&"connected"!==e&&(this._cleanup(),this._newSigninPromiseIfNeeded())}),this.watchlist=new ke(t),this.pusher.connection.bind("message",t=>{"pusher:signin_success"===t.event&&this._onSigninSuccess(t.data),this.serverToUserChannel&&this.serverToUserChannel.name===t.channel&&this.serverToUserChannel.handleEvent(t)})}signin(){this.signin_requested||(this.signin_requested=!0,this._signin())}_signin(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),"connected"===this.pusher.connection.state&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))}_onSigninSuccess(t){try{this.user_data=JSON.parse(t.user_data)}catch(e){return M.error("Failed parsing user data after signin: "+t.user_data),void this._cleanup()}if("string"!=typeof this.user_data.id||""===this.user_data.id)return M.error("user_data doesn't contain an id. user_data: "+this.user_data),void this._cleanup();this._signinDoneResolve(),this._subscribeChannels()}_subscribeChannels(){this.serverToUserChannel=new ut("#server-to-user-"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global((t,e)=>{0!==t.indexOf("pusher_internal:")&&0!==t.indexOf("pusher:")&&this.emit(t,e)}),(t=>{t.subscriptionPending&&t.subscriptionCancelled?t.reinstateSubscription():t.subscriptionPending||"connected"!==this.pusher.connection.state||t.subscribe()})(this.serverToUserChannel)}_cleanup(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()}_newSigninPromiseIfNeeded(){if(!this.signin_requested)return;if(this.signinDonePromise&&!this.signinDonePromise.done)return;const{promise:t,resolve:e,reject:n}=Te();t.done=!1;const i=()=>{t.done=!0};t.then(i).catch(i),this.signinDonePromise=t,this._signinDoneResolve=e}}class Oe{static ready(){Oe.isReady=!0;for(var t=0,e=Oe.instances.length;tae.getDefaultStrategy(this.config,t,fe),timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:Boolean(this.config.useTLS)}),this.connection.bind("connected",()=>{this.subscribeAll(),this.timelineSender&&this.timelineSender.send(this.connection.isUsingTLS())}),this.connection.bind("message",t=>{var e=0===t.event.indexOf("pusher_internal:");if(t.channel){var n=this.channel(t.channel);n&&n.handleEvent(t)}e||this.global_emitter.emit(t.event,t.data)}),this.connection.bind("connecting",()=>{this.channels.disconnect()}),this.connection.bind("disconnected",()=>{this.channels.disconnect()}),this.connection.bind("error",t=>{M.warn(t)}),Oe.instances.push(this),this.timeline.info({instances:Oe.instances.length}),this.user=new Pe(this),Oe.isReady&&this.connect()}channel(t){return this.channels.find(t)}allChannels(){return this.channels.all()}connect(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),e=this.timelineSender;this.timelineSenderTimer=new b(6e4,(function(){e.send(t)}))}}disconnect(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)}bind(t,e,n){return this.global_emitter.bind(t,e,n),this}unbind(t,e,n){return this.global_emitter.unbind(t,e,n),this}bind_global(t){return this.global_emitter.bind_global(t),this}unbind_global(t){return this.global_emitter.unbind_global(t),this}unbind_all(t){return this.global_emitter.unbind_all(),this}subscribeAll(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)}subscribe(t){var e=this.channels.add(t,this);return e.subscriptionPending&&e.subscriptionCancelled?e.reinstateSubscription():e.subscriptionPending||"connected"!==this.connection.state||e.subscribe(),e}unsubscribe(t){var e=this.channels.find(t);e&&e.subscriptionPending?e.cancelSubscription():(e=this.channels.remove(t))&&e.subscribed&&e.unsubscribe()}send_event(t,e,n){return this.connection.send_event(t,e,n)}shouldUseTLS(){return this.config.useTLS}signin(){this.user.signin()}}Oe.instances=[],Oe.isReady=!1,Oe.logToConsole=!1,Oe.Runtime=ae,Oe.ScriptReceivers=ae.ScriptReceivers,Oe.DependenciesReceivers=ae.DependenciesReceivers,Oe.auth_callbacks=ae.auth_callbacks;var Ee=e.default=Oe;ae.setup(Oe)}])})); //# sourceMappingURL=pusher.worker.min.js.map \ No newline at end of file diff --git a/dist/worker/pusher.worker.min.js.map b/dist/worker/pusher.worker.min.js.map index 9d1eb59ef..7bcd970f8 100644 --- a/dist/worker/pusher.worker.min.js.map +++ b/dist/worker/pusher.worker.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/options.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","default","b64chars","b64tab","charAt","cb_utob","cc","utob","u","replace","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","callback","timer","isRunning","ensureAborted","clearTimeout","clearInterval","setTimeout","setInterval","now","Date","valueOf","defer","OneOffTimer","method","boundArguments","Array","slice","arguments","apply","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","f","keys","_","context","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","toString","buildQueryString","params","undefined","source","JSON","e","objects","paths","derez","path","nu","$ref","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","getGenericURL","baseScheme","useTLS","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","_callbacks","prefix","add","prefixedEventName","fn","remove","names","removeCallback","removeAllCallbacks","binding","failThrough","callbacks","global_callbacks","eventName","bind_global","unbind","unbind_global","unbind_all","emit","metadata","args","globalLog","message","console","log","debug","warn","globalLogWarn","error","globalLogError","defaultLoggingFunction","logToConsole","hooks","priority","options","initialize","transportConnectionInitializer","state","timeline","id","generateUniqueID","handlesActivityChecks","supportsPing","connect","socket","url","urls","getSocket","onError","changeState","bindListeners","close","send","ping","onOpen","beforeOpen","getPath","onopen","type","buildTimelineMessage","onClose","closeEvent","code","reason","wasClean","unbindListeners","onMessage","onActivity","onerror","onclose","onmessage","onactivity","info","cid","isSupported","environment","createConnection","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","manager","minPingDelay","maxPingDelay","pingDelay","connection","openTimestamp","onClosed","reportDeath","lifespan","Math","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","parse","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","finish","isEmpty","TimelineTransport","getAgent","msg","setPrototypeOf","status","urlStore","baseUrl","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","urlObj","urlPrefix","pusher","subscribed","subscriptionPending","subscriptionCancelled","authorize","socketId","auth","trigger","suffix","disconnect","handleEvent","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","subscribe","assign","HTTPAuthError","channel_data","cancelSubscription","reinstateSubscription","config","channelAuthorizer","channelName","reset","members","each","member","setMyID","myID","onSubscription","subscriptionData","presence","hash","count","me","addMember","memberData","user_info","removeMember","authData","channelData","user","signinDonePromise","user_data","handleInternalEvent","addedMember","removedMember","nacl","sharedSecret","handleEncryptedEvent","ciphertext","nonce","cipherText","secretbox","overheadLength","nonceLength","bytes","open","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","isUsingTLS","handshake","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","all","values","find","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","getAssistant","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","number","trueBranch","falseBranch","testSupportsStrategy","State","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","http_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","xhr_streaming_transport","xhr_polling_transport","ws_loop","wss_loop","streaming_loop","polling_loop","http_loop","start","payload","position","xhr","getRequest","unloader","addUnloadListener","setRequestHeader","removeUnloadListener","abortRequest","onChunk","chunk","advanceBuffer","isBufferTooLong","buffer","unreadData","endOfLinePosition","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","TimelineLevel","session","randomString","location","parts","exec","base","getLocation","readyState","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","reconnect","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onFinished","getXHRAPI","onreadystatechange","onprogress","responseText","getDefaultStrategy","Transports","createSocket","createXHR","createRequest","setup","PusherClass","ready","getClientFeatures","getProtocol","isOnline","query","authOptions","authRequestType","headers","Headers","headerName","headersProvider","dynamicHeaders","body","request","Request","credentials","fetch","then","response","text","parsedData","err","sender","host","json","getAuthorizers","ajax","WebSocket","XMLHttpRequest","floor","globalThis","crypto","getRandomValues","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","version","cluster","features","failAttempt","onInitialized","serializedTransport","AuthRequestType","transportClass","enabledTransports","disabledTransports","ignoreNullOrigin","deferred","paramsProvider","dynamicParams","composeChannelQuery","UserAuthentication","ChannelAuthorization","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","signin","userAuthenticator","_subscribeChannels","done","setDone","app_key","checkAppKey","validateOptions","statsHost","timelineParams","global_emitter","sessionID","Pusher","timelineSender","subscribeAll","internal","instances","isReady","allChannels","timelineSenderTimer","PeriodicTimer","event_name","channel_name","Runtime","ScriptReceivers","DependenciesReceivers","auth_callbacks"],"mappings":"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","file":"pusher.worker.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/isomorphic/default_strategy.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/runtime.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/worker/net_info.ts","webpack://Pusher/./src/runtimes/worker/auth/fetch_auth.ts","webpack://Pusher/./src/runtimes/worker/timeline/fetch_timeline.ts","webpack://Pusher/./src/runtimes/worker/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts","webpack://Pusher/./src/core/options.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_paddingCharacter","encodedLength","length","encode","data","out","_encodeByte","left","maxDecodedLength","decodedLength","_getPaddingLength","decode","Uint8Array","paddingLength","op","haveBad","v0","v1","v2","v3","_decodeChar","charCodeAt","Error","b","result","String","fromCharCode","Coder","stdCoder","URLSafeCoder","urlSafeCoder","INVALID_UTF8","arr","pos","chars","min","n1","n2","n3","push","join","default","b64chars","b64tab","charAt","cb_utob","cc","utob","u","replace","cb_encode","ccc","padlen","ord","btoa","set","clear","delay","callback","timer","clearTimeout","clearInterval","super","setTimeout","setInterval","now","Date","valueOf","defer","args","boundArguments","Array","slice","arguments","apply","concat","extend","target","sources","extensions","constructor","stringify","safeJSONStringify","arrayIndexOf","array","item","nativeIndexOf","indexOf","objectApply","f","keys","_","context","map","filter","test","filterObject","Boolean","any","encodeParamsObject","encodeURIComponent","toString","buildQueryString","params","undefined","method","source","JSON","e","objects","paths","derez","path","nu","$ref","VERSION","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","transport","channelAuthorization","cdn_http","cdn_https","dependency_suffix","getGenericURL","baseScheme","useTLS","hostTLS","hostNonTLS","getGenericPath","queryString","ws","getInitial","http","_callbacks","prefix","prefixedEventName","fn","names","removeCallback","removeAllCallbacks","binding","failThrough","callbacks","global_callbacks","eventName","add","remove","unbind","unbind_global","metadata","globalLog","message","console","log","globalLogWarn","globalLogError","warn","error","defaultLoggingFunction","logToConsole","hooks","priority","options","initialize","transportConnectionInitializer","state","timeline","id","generateUniqueID","handlesActivityChecks","supportsPing","socket","url","urls","getSocket","onError","changeState","bindListeners","debug","close","send","ping","beforeOpen","getPath","onopen","emit","type","buildTimelineMessage","closeEvent","code","reason","wasClean","unbindListeners","onOpen","onerror","onclose","onClose","onmessage","onMessage","onactivity","onActivity","info","cid","environment","isSupported","WSTransport","isInitialized","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","manager","minPingDelay","maxPingDelay","pingDelay","connection","createConnection","openTimestamp","onClosed","reportDeath","lifespan","Math","max","isAlive","Protocol","decodeMessage","messageEvent","messageData","parse","pusherEventData","pusherEvent","event","channel","user_id","encodeMessage","processHandshake","activity_timeout","action","socket_id","getCloseAction","getCloseError","send_event","listeners","activity","closed","handleCloseEvent","listener","finish","isEmpty","TimelineTransport","getAgent","BadEventName","msg","setPrototypeOf","BadChannelName","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","status","urlStore","baseUrl","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","urlObj","pusher","subscribed","subscriptionPending","subscriptionCancelled","socketId","auth","suffix","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","unsubscribe","subscription_count","subscriptionCount","authorize","assign","channel_data","config","channelAuthorizer","channelName","reset","members","member","myID","subscriptionData","presence","hash","count","me","memberData","user_info","authData","channelData","setMyID","user","signinDonePromise","user_data","handleInternalEvent","addedMember","addMember","removedMember","removeMember","onSubscription","disconnect","nacl","sharedSecret","handleEncryptedEvent","handleEvent","ciphertext","nonce","cipherText","secretbox","overheadLength","nonceLength","bytes","open","getDataToEmit","raw","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","runner","strategy","updateState","startConnecting","setUnavailableTimer","disconnectInternally","handshake","connect","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","round","retryTimer","ensureAborted","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","Infinity","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","newState","previousState","newStateDescription","previous","current","channels","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","createChannel","values","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","livesLeft","lives","strategies","loop","failFast","timeout","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","isRunning","callbackBuilder","runners","rs","abortRunner","allRunnersFailed","aborted","transports","ttl","storage","getLocalStorage","serializedCache","getTransportCacheKey","flushTransportCache","fetchTransportCache","timestamp","cached","latency","startTimestamp","pop","cb","storeTransportCache","number","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","http_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","xhr_streaming_transport","xhr_polling_transport","ws_loop","wss_loop","streaming_loop","polling_loop","http_loop","payload","position","xhr","getRequest","unloader","addUnloadListener","setRequestHeader","removeUnloadListener","abortRequest","chunk","advanceBuffer","isBufferTooLong","buffer","unreadData","endOfLinePosition","State","autoIncrement","getUniqueURL","separator","randomNumber","randomInt","session","randomString","location","parts","exec","base","getLocation","readyState","CONNECTING","openStream","sendRaw","sendHeartbeat","OPEN","createSocketRequest","start","closeStream","CLOSED","onEvent","onHeartbeat","hostname","urlParts","stream","getReceiveURL","onChunk","onFinished","reconnect","unbind_all","getXHRAPI","onreadystatechange","onprogress","responseText","getDefaultStrategy","Transports","createSocket","createRequest","PusherClass","ready","getClientFeatures","getProtocol","createXHR","query","authOptions","authRequestType","headers","Headers","headerName","headersProvider","dynamicHeaders","body","request","Request","credentials","fetch","then","response","text","parsedData","catch","err","sender","host","json","setup","TimelineLevel","getAuthorizers","ajax","WebSocket","XMLHttpRequest","floor","globalThis","crypto","getRandomValues","Uint32Array","events","sent","uniqueID","level","limit","shift","ERROR","INFO","DEBUG","sendfn","bundle","lib","version","cluster","features","failAttempt","onInitialized","serializedTransport","AuthRequestType","transportClass","enabledTransports","disabledTransports","ignoreNullOrigin","getAssistant","deferred","paramsProvider","dynamicParams","composeChannelQuery","UserAuthentication","ChannelAuthorization","getHttpHost","opts","getWebsocketHost","shouldUseTLS","forceTLS","getEnableStatsConfig","enableStats","disableStats","buildUserAuthenticator","buildChannelAuthorizer","customHandler","channelAuthorizerGenerator","deprecatedAuthorizerOptions","ChannelAuthorizerProxy","authorizer","buildChannelAuth","bindWatchlistInternalEvent","forEach","watchlistEvent","resolve","reject","promise","Promise","res","rej","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","_cleanup","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","userAuthenticator","_subscribeChannels","bind_global","reinstateSubscription","subscribe","ensure_subscribed","done","setDone","isReady","instances","app_key","checkAppKey","validateOptions","statsHost","timelineParams","getConfig","global_emitter","sessionID","timelineSender","subscribeAll","isUsingTLS","internal","find","all","timelineSenderTimer","event_name","channel_name","cancelSubscription","signin","Runtime","ScriptReceivers","DependenciesReceivers","auth_callbacks"],"mappings":"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","file":"pusher.worker.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\nimport StrategyOptions from 'core/strategies/strategy_options';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Collections.extend({}, ws_options, {\n useTLS: true\n });\n var http_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n http_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n http_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [xhr_streaming_transport],\n timeouts\n );\n var polling_loop = new SequentialStrategy([xhr_polling_transport], timeouts);\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_loop, { delay: 5000 })\n ]);\n }\n\n return new CachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_loop)\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import * as Collections from 'core/utils/collections';\nimport Transports from 'isomorphic/transports/transports';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport Ajax from 'core/http/ajax';\nimport getDefaultStrategy from './default_strategy';\nimport TransportsTable from 'core/transports/transports_table';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\n\nvar Isomorphic: any = {\n getDefaultStrategy,\n Transports: Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n setup(PusherClass): void {\n PusherClass.ready();\n },\n\n getLocalStorage(): any {\n return undefined;\n },\n\n getClientFeatures(): any[] {\n return Collections.keys(\n Collections.filterObject({ ws: Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n },\n\n getProtocol(): string {\n return 'http:';\n },\n\n isXHRSupported(): boolean {\n return true;\n },\n\n createSocketRequest(method: string, url: string) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n createXHR(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n addUnloadListener(listener: any) {},\n removeUnloadListener(listener: any) {}\n};\n\nexport default Isomorphic;\n","/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import { default as EventsDispatcher } from 'core/events/dispatcher';\nimport Reachability from 'core/reachability';\n\nexport class NetInfo extends EventsDispatcher implements Reachability {\n isOnline(): boolean {\n return true;\n }\n}\n\nexport var Network = new NetInfo();\n","import AbstractRuntime from 'runtimes/interface';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nvar fetchAuth: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n for (var headerName in authOptions.headers) {\n headers.set(headerName, authOptions.headers[headerName]);\n }\n\n if (authOptions.headersProvider != null) {\n const dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n headers.set(headerName, dynamicHeaders[headerName]);\n }\n }\n\n var body = query;\n var request = new Request(authOptions.endpoint, {\n headers,\n body,\n credentials: 'same-origin',\n method: 'POST'\n });\n\n return fetch(request)\n .then(response => {\n let { status } = response;\n if (status === 200) {\n // manually parse the json so we can provide a more helpful error in\n // failure case\n return response.text();\n }\n throw new HTTPAuthError(\n status,\n `Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`\n );\n })\n .then(data => {\n let parsedData;\n try {\n parsedData = JSON.parse(data);\n } catch (e) {\n throw new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`\n );\n }\n callback(null, parsedData);\n })\n .catch(err => {\n callback(err, null);\n });\n};\n\nexport default fetchAuth;\n","import Logger from 'core/logger';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport TimelineTransport from 'core/timeline/timeline_transport';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var query = Collections.buildQueryString(data);\n url += '/' + 2 + '?' + query;\n\n fetch(url)\n .then(response => {\n if (response.status !== 200) {\n throw `received ${response.status} from stats.pusher.com`;\n }\n return response.json();\n })\n .then(({ host }) => {\n if (host) {\n sender.host = host;\n }\n })\n .catch(err => {\n Logger.debug('TimelineSender Error: ', err);\n });\n };\n};\n\nvar fetchTimeline = {\n name: 'xhr',\n getAgent\n};\n\nexport default fetchTimeline;\n","import Isomorphic from 'isomorphic/runtime';\nimport Runtime from '../interface';\nimport { Network } from './net_info';\nimport fetchAuth from './auth/fetch_auth';\nimport { AuthTransports } from 'core/auth/auth_transports';\nimport fetchTimeline from './timeline/fetch_timeline';\n\n// Very verbose but until unavoidable until\n// TypeScript 2.1, when spread attributes will be\n// supported\nconst {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory\n} = Isomorphic;\n\nconst Worker: Runtime = {\n getDefaultStrategy,\n Transports,\n setup,\n getProtocol,\n isXHRSupported,\n getLocalStorage,\n createXHR,\n createWebSocket,\n addUnloadListener,\n removeUnloadListener,\n transportConnectionInitializer,\n createSocketRequest,\n HTTPFactory,\n\n TimelineTransport: fetchTimeline,\n\n getAuthorizers(): AuthTransports {\n return { ajax: fetchAuth };\n },\n\n getWebSocketAPI() {\n return WebSocket;\n },\n\n getXHRAPI() {\n return XMLHttpRequest;\n },\n\n getNetwork() {\n return Network;\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = globalThis.crypto || globalThis['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Worker;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport Util from './util';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ce3856768..e31801deb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,22 @@ { "name": "pusher-js", - "version": "8.0.1", + "version": "8.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pusher-js", - "version": "8.0.1", + "version": "8.1.0", "license": "MIT", "dependencies": { - "@types/express-serve-static-core": "4.17.28", - "@types/node": "^14.14.31", "tweetnacl": "^1.0.3" }, "devDependencies": { "@react-native-community/netinfo": "^5.9.7", "@stablelib/base64": "^1.0.0", "@stablelib/utf8": "^1.0.0", + "@types/express-serve-static-core": "4.17.28", + "@types/node": "^20.3.0", "buffer": "^5.6.0", "faye-websocket": "^0.11.3", "fetch-mock": "git+https://git@github.com/jpatel531/fetch-mock.git", @@ -37,7 +37,7 @@ "prettier": "^1.19.1", "source-map-loader": "^1.1.3", "ts-loader": "^6.0.4", - "typescript": "^3.9.0", + "typescript": "^5.1.3", "uglify-js": "^2.6.2", "webpack": "^4.46.0", "webpack-cli": "^3.3.12", @@ -3583,6 +3583,7 @@ "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3638,19 +3639,22 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.23.tgz", - "integrity": "sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA==" + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true }, "node_modules/@types/retry": { "version": "0.12.0", @@ -14243,16 +14247,16 @@ "dev": true }, "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ua-parser-js": { @@ -18074,6 +18078,7 @@ "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -18129,19 +18134,22 @@ "dev": true }, "@types/node": { - "version": "14.18.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.23.tgz", - "integrity": "sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA==" + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==", + "dev": true }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true }, "@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true }, "@types/retry": { "version": "0.12.0", @@ -26734,9 +26742,9 @@ "dev": true }, "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, "ua-parser-js": { diff --git a/package.json b/package.json index 75222b758..c5242e2d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pusher-js", - "version": "8.0.2", + "version": "8.1.0", "description": "Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers", "main": "dist/node/pusher.js", "browser": "dist/web/pusher.js", @@ -54,17 +54,17 @@ "prettier": "^1.19.1", "source-map-loader": "^1.1.3", "ts-loader": "^6.0.4", - "typescript": "^3.9.0", + "typescript": "^5.1.3", "uglify-js": "^2.6.2", "webpack": "^4.46.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^4.11.1", "webpack-merge": "^5.8.0", - "xmlhttprequest": "^1.8.0" + "xmlhttprequest": "^1.8.0", + "@types/node": "^20.3.0", + "@types/express-serve-static-core": "4.17.28" }, "dependencies": { - "tweetnacl": "^1.0.3", - "@types/node": "^14.14.31", - "@types/express-serve-static-core": "4.17.28" + "tweetnacl": "^1.0.3" } } diff --git a/tsconfig.json b/tsconfig.json index bed4d10cb..8a997ae26 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "module": "es6", "declaration": true, "declarationDir": "types", - "target": "es3", + "target": "ES6", "removeComments": true, "moduleResolution": "node", "baseUrl": "src", diff --git a/types/src/core/auth/options.d.ts b/types/src/core/auth/options.d.ts index 61fba3228..5ff6deef3 100644 --- a/types/src/core/auth/options.d.ts +++ b/types/src/core/auth/options.d.ts @@ -7,7 +7,7 @@ export interface ChannelAuthorizationData { channel_data?: string; shared_secret?: string; } -export declare type ChannelAuthorizationCallback = (error: Error | null, authData: ChannelAuthorizationData | null) => void; +export type ChannelAuthorizationCallback = (error: Error | null, authData: ChannelAuthorizationData | null) => void; export interface ChannelAuthorizationRequestParams { socketId: string; channelName: string; @@ -19,14 +19,14 @@ export interface UserAuthenticationData { auth: string; user_data: string; } -export declare type UserAuthenticationCallback = (error: Error | null, authData: UserAuthenticationData | null) => void; +export type UserAuthenticationCallback = (error: Error | null, authData: UserAuthenticationData | null) => void; export interface UserAuthenticationRequestParams { socketId: string; } export interface UserAuthenticationHandler { (params: UserAuthenticationRequestParams, callback: UserAuthenticationCallback): void; } -export declare type AuthTransportCallback = ChannelAuthorizationCallback | UserAuthenticationCallback; +export type AuthTransportCallback = ChannelAuthorizationCallback | UserAuthenticationCallback; export interface AuthOptionsT { transport: 'ajax' | 'jsonp'; endpoint: string; diff --git a/types/src/core/config.d.ts b/types/src/core/config.d.ts index e36d44528..43d0bd756 100644 --- a/types/src/core/config.d.ts +++ b/types/src/core/config.d.ts @@ -1,8 +1,8 @@ import { Options } from './options'; import { ChannelAuthorizationHandler, UserAuthenticationHandler } from './auth/options'; import * as nacl from 'tweetnacl'; -export declare type AuthTransport = 'ajax' | 'jsonp'; -export declare type Transport = 'ws' | 'wss' | 'xhr_streaming' | 'xhr_polling' | 'sockjs'; +export type AuthTransport = 'ajax' | 'jsonp'; +export type Transport = 'ws' | 'wss' | 'xhr_streaming' | 'xhr_polling' | 'sockjs'; export interface Config { activityTimeout: number; enableStats: boolean; diff --git a/types/src/core/strategies/transport_strategy.d.ts b/types/src/core/strategies/transport_strategy.d.ts index 8fb096eb8..0a9c36f41 100644 --- a/types/src/core/strategies/transport_strategy.d.ts +++ b/types/src/core/strategies/transport_strategy.d.ts @@ -9,9 +9,6 @@ export default class TransportStrategy implements Strategy { constructor(name: string, priority: number, transport: Transport, options: StrategyOptions); isSupported(): boolean; connect(minPriority: number, callback: Function): { - abort: () => void; - forceMinPriority: () => void; - } | { abort: () => void; forceMinPriority: (p: any) => void; }; diff --git a/types/src/core/utils/timers/scheduling.d.ts b/types/src/core/utils/timers/scheduling.d.ts index bab076e8b..6effac3b3 100644 --- a/types/src/core/utils/timers/scheduling.d.ts +++ b/types/src/core/utils/timers/scheduling.d.ts @@ -4,5 +4,5 @@ interface Scheduler { interface Canceller { (number: any): void; } -declare type Delay = number; +type Delay = number; export { Scheduler, Canceller, Delay };