@monterosa/sdk-enmasse-kit 0.18.9 → 0.18.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm5.js","sources":["../src/settings.js","../src/utils/logger.js","../src/utils/queue.js","../src/utils/time.js","../src/transports/base.js","../src/drivers/base.js","../src/drivers/xhr.js","../src/drivers/websocket.js","../src/transports/proxy.js","../src/transports/socket.js","../src/transport_manager.js","../src/connection_manager.js","../src/services/demographics.js","../src/index.js"],"sourcesContent":["import {\n getItem as getStorageItem,\n checkAvailability as checkStorageAvailability,\n} from '@monterosa/sdk-util';\n\nconst ARG_OVERRIDE_METHODS = 'enmasse_override_methods';\nconst ARG_DEBUG = 'enmasse_debug';\nconst ARG_CONFIG = 'enmasse_config';\n\nexport const SSCP_KLASS_AUTH = 'auth';\nexport const SSCP_KLASS_AUTHR = 'authr';\nexport const SSCP_KLASS_AUTHOK = 'authok';\nexport const SSCP_KLASS_PING = 'ping';\nexport const SSCP_KLASS_SUB = 'sub';\nexport const SSCP_KLASS_UNSUB = 'unsub';\nexport const SSCP_KLASS_EOC = 'eoc';\nexport const SSCP_KLASS_LOGIN = 'login';\nexport const SSCP_KLASS_LOGIN_OK = 'login_ok';\nexport const SSCP_KLASS_LOGIN_FAIL = 'login_fail';\nexport const SSCP_KLASS_COUNTER = 'counter';\n\nconst getSettingFor = (name) => {\n if (checkStorageAvailability()) {\n const value = getStorageItem(name);\n\n if (value !== null) {\n return value;\n }\n }\n\n // Guarding the use of the window object in environments where it might not be\n // available, such as during server - side rendering in a framework like Next.js\n if (typeof window === 'undefined') {\n return null;\n }\n\n const { searchParams } = new URL(window.location.href);\n\n if (searchParams.has(name)) {\n return searchParams.get(name);\n }\n\n return false;\n};\n\nconst getSettingForMethods = () => {\n const value = getSettingFor(ARG_OVERRIDE_METHODS);\n\n if (typeof value === 'string') {\n return value.split(',');\n }\n\n return undefined;\n};\n\nexport const ENMASSE_OVERRIDE_METHODS = getSettingForMethods();\nexport const ENMASSE_DEBUG = getSettingFor(ARG_DEBUG);\nexport const ENMASSE_CONFIG = getSettingFor(ARG_CONFIG);\n","/* eslint no-bitwise: \"off\" */\n/* eslint-disable no-console */\n\nimport { getErrorMessage } from '@monterosa/sdk-util';\n\nimport { ENMASSE_DEBUG } from '../settings';\n\nexport const TYPE_PROTOCOL = 1; // 0000 0000 0001\nexport const TYPE_MANAGER = 2; // 0000 0000 0010\nexport const TYPE_TRANSPORT = 4; // 0000 0000 0100\nexport const TYPE_DRIVER = 8; // 0000 0000 1000\nexport const TYPE_QUEUE = 16; // 0000 0001 0000\nexport const TYPE_TIME = 32; // 0000 0010 0000\nexport const TYPE_MANAGER_EXTRA = 64; // 0000 0100 0000\nexport const TYPE_DRIVER_EXTRA = 128; // 0000 1000 0000\nexport const TYPE_SERVICE = 256; // 0001 0000 0000\n\nconst LEVELS = {\n brief: TYPE_PROTOCOL,\n full: TYPE_PROTOCOL | TYPE_MANAGER | TYPE_TRANSPORT | TYPE_DRIVER,\n exhaustive:\n TYPE_PROTOCOL |\n TYPE_MANAGER |\n TYPE_MANAGER_EXTRA |\n TYPE_TRANSPORT |\n TYPE_DRIVER |\n TYPE_DRIVER_EXTRA |\n TYPE_QUEUE |\n TYPE_TIME |\n TYPE_SERVICE,\n};\n\n// eslint-disable-next-line\nlet log = () => {};\n\nif (ENMASSE_DEBUG) {\n log = (...args) => {\n if (typeof console === 'undefined' || !console.log) {\n return;\n }\n\n // parse arguments\n // var args = Array.prototype.slice.call(arguments);\n\n // the first argument is the debug type\n const [type] = args;\n\n // the rest of arguments are arbitrary data\n const rest = args.slice(1);\n\n // const time = ['getMinutes', 'getSeconds']\n // .map((f) => new Date()[f]())\n // .map((v) => (v < 10 ? '0' : '') + v)\n // .join(':');\n\n // add current time\n // rest.unshift(time);\n\n // do not log if mask doesn't contain current type\n if ((LEVELS[ENMASSE_DEBUG] & type) === 0) {\n return;\n }\n\n console.log(...rest);\n };\n}\n\nfunction logError(message, err) {\n console.error(`EnMasse: ${message}: ${getErrorMessage(err)}`);\n}\n\nexport { log, logError };\n","import * as Logger from './logger';\nimport {\n SSCP_KLASS_LOGIN,\n SSCP_KLASS_AUTHR,\n SSCP_KLASS_SUB,\n SSCP_KLASS_UNSUB,\n} from '../settings';\n\nexport default class Queue {\n constructor(config = {}) {\n // the main storage for messages\n this.queue = [];\n\n // stash of the queue\n this.stashed = [];\n\n this.running = false;\n\n this.runner = typeof config.runner === 'function' ? config.runner : null;\n\n // list of channels we subscribed to\n this.subscriptions = [];\n }\n\n push(message, force = false) {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::push', message, force);\n\n const { klass, channel } = message;\n\n if (!force) {\n switch (klass) {\n case SSCP_KLASS_LOGIN:\n case SSCP_KLASS_AUTHR:\n break;\n case SSCP_KLASS_SUB:\n if (this.subscriptions.indexOf(channel) === -1) {\n this.subscriptions.push(channel);\n } else {\n return;\n }\n break;\n case SSCP_KLASS_UNSUB: {\n const index = this.subscriptions.indexOf(channel);\n\n if (index !== -1) {\n this.subscriptions.splice(index, 1);\n } else {\n return;\n }\n break;\n }\n default:\n if (this.subscriptions.indexOf(channel) === -1) {\n return;\n }\n break;\n }\n }\n\n this.queue.push(message);\n }\n\n getSubscriptions() {\n return this.subscriptions;\n }\n\n run() {\n Logger.log(\n Logger.TYPE_QUEUE,\n 'Queue::run',\n `running=${this.running}, head=${this.queue[0]}`,\n );\n\n // abort if whether\n // 1. runner function is not set\n // 2. OR queue is already running\n // 3. OR there is no messages in the queue\n if (this.runner === null || this.running || !this.queue[0]) {\n return;\n }\n\n this.running = true;\n\n this.runner(this.queue.shift());\n }\n\n success() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::success');\n\n this.running = false;\n\n this.run();\n }\n\n failure() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::failure');\n\n this.running = false;\n }\n\n stash() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::stash');\n\n let item;\n\n // eslint-disable-next-line\n while (undefined !== (item = this.queue.shift())) {\n this.stashed.push(item);\n }\n }\n\n unstash() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::unstash');\n\n let item;\n\n // eslint-disable-next-line\n while (undefined !== (item = this.stashed.shift())) {\n this.queue.push(item);\n }\n }\n}\n","import * as Logger from './logger';\n\n// Returns current local timestamp\nconst local = () => new Date() / 1000;\n\n// Server time default to local time\nlet serverTime = local();\n\n// Time when the server time was received on the client\nlet clientTimeAtSync = local();\n\nexport const setTime = (newTime) => {\n Logger.log(Logger.TYPE_TIME, 'Time::setTime', newTime);\n\n serverTime = newTime;\n // offset = local() - time;\n clientTimeAtSync = local();\n};\n\nexport const now = () => {\n const elapsedTime = local() - clientTimeAtSync;\n\n return Math.round(serverTime + elapsedTime);\n};\n","import { Emitter } from '@monterosa/sdk-util';\n\nexport default class Transport extends Emitter {\n // generic events\n static ON_READY = 'ready';\n static ON_MESSAGE = 'message';\n\n // connection state events\n static ON_CONNECTED = 'connected';\n static ON_CONNECT_FAILED = 'connect_failed';\n static ON_CONNECT_LOST = 'connect_lost';\n static ON_DISCONNECTED = 'disconnected';\n\n // states\n static STATE_CONNECTED = 'connected';\n static STATE_CONNECTING = 'connecting';\n static STATE_DISCONNECTED = 'disconnected';\n static STATE_DISCONNECTING = 'disconnecting';\n\n constructor() {\n super();\n\n this.state = this.STATE_DISCONNECTED;\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n}\n","/* eslint class-methods-use-this: \"off\" */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nexport default class Driver extends Emitter {\n static ON_READY = 'ready';\n static ON_MESSAGE = 'message';\n static ON_CONNECTED = 'connected';\n static ON_DISCONNECTED = 'disconnected';\n\n constructor() {\n super();\n\n this.connected = false;\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n\n connect() {}\n\n disconnect() {}\n\n // Arguments:\n //\n // data = null\n // success = () => {}\n // failure = () => {}\n send() {}\n\n init() {\n this.trigger(Driver.ON_READY);\n }\n}\n","import { getGlobal } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\nimport Driver from './base';\n\nconst globals = getGlobal();\n\nexport default class XHRDriver extends Driver {\n constructor(config = {}) {\n super();\n\n this.config = config;\n this.requests = {};\n this.requestIdx = 0;\n }\n\n // CORS request wrapper\n _request(url, success = () => {}, failure = () => {}, abort = () => {}) {\n this.requestIdx += 1;\n\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request url=${url}, idx=${this.requestIdx}`,\n );\n\n const self = this;\n let xhr = new XMLHttpRequest();\n const method = 'POST';\n\n if (typeof XDomainRequest !== 'undefined') {\n xhr = new XDomainRequest();\n xhr.open(method, url);\n } else if ('withCredentials' in xhr) {\n xhr.open(method, url, true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n } else {\n return null;\n }\n\n xhr._idx = this.requestIdx;\n\n xhr.onload = function onLoad() {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onload idx=${xhr._idx}, response=${this.responseText}`,\n );\n\n if (this.responseText.length > 0) {\n success(self._parseResponse(this.responseText));\n } else {\n failure(this.responseText);\n }\n };\n\n xhr.onerror = function onError() {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onerror idx=${xhr._idx}, response=${this.responseText}`,\n );\n\n failure(this.responseText);\n };\n\n // XHR doesn't trigger onabort event in IE < 10\n // attaching custom abort handler and execute\n // it manually on each abort() call\n xhr._onabort = () => {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onabort idx=${xhr._idx}`,\n );\n\n abort();\n };\n\n return xhr;\n }\n\n _parseResponse(response) {\n const data = {};\n const chunks = response.split('&');\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n const [key, value] = chunks[i].split('=');\n\n const normalisedValue = decodeURIComponent(value.replace('\\0', ''));\n\n if (key in data) {\n if (data[key].constructor !== Array) {\n data[key] = [data[key]];\n }\n data[key].push(normalisedValue);\n } else {\n data[key] = normalisedValue;\n }\n }\n\n return data;\n }\n\n _removeRequest(idx) {\n Logger.log(Logger.TYPE_DRIVER_EXTRA, 'XHRDriver::removeRequest', idx);\n\n if (Object.prototype.hasOwnProperty.call(this.requests, idx)) {\n delete this.requests[idx];\n }\n }\n\n connect() {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::connect');\n\n if (this.connected) {\n Logger.log(\n Logger.TYPE_DRIVER,\n 'XHRDriver::connect already been connected!',\n );\n\n return;\n }\n\n this.connected = true;\n\n this.trigger(XHRDriver.ON_CONNECTED);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::disconnect');\n\n if (this.connected) {\n // abort all requests\n for (const idx in this.requests) {\n if (\n Object.prototype.hasOwnProperty.call(this.requests, idx) &&\n this.requests[idx].abort\n ) {\n this.requests[idx].abort();\n\n if (this.requests[idx]._onabort) {\n this.requests[idx]._onabort();\n }\n\n this._removeRequest(idx);\n }\n }\n\n this.connected = false;\n }\n\n this.trigger(XHRDriver.ON_DISCONNECTED);\n }\n\n send(url, data, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::send', data);\n\n let xhr;\n let retry = 1;\n\n const send = () => {\n // eslint-disable-next-line\n xhr = this._request(url, onSuccess, onFailure, onAbort);\n\n this.requests[xhr._idx] = xhr;\n\n // fixes aborting requests in IE\n setTimeout(() => {\n xhr.send(data);\n }, 0);\n };\n\n const onSuccess = (response) => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::success', data);\n this._removeRequest(xhr._idx);\n success(response);\n };\n\n const onFailure = (response) => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::failure, retry: ', retry);\n this._removeRequest(xhr._idx);\n if (retry <= this.config.request_retries) {\n setTimeout(() => {\n send();\n retry++;\n }, this.config.request_retry_delay * 1000);\n } else {\n failure(response);\n }\n };\n\n const onAbort = () => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::abort', data);\n this._removeRequest(xhr._idx);\n failure();\n };\n\n send();\n }\n\n static hasSupport() {\n return (\n 'XDomainRequest' in globals || 'withCredentials' in new XMLHttpRequest()\n );\n }\n}\n","/* eslint class-methods-use-this: \"off\" */\n\nimport { getGlobal } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\nimport Driver from './base';\n\nconst globals = getGlobal();\n\nexport default class WebSocketDriver extends Driver {\n constructor() {\n super();\n\n this.websocket = null;\n this.closeTimeout = null;\n }\n\n _onMessage(e) {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onMessage', e.data);\n this.trigger(WebSocketDriver.ON_MESSAGE, e.data);\n }\n\n _onOpen() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onOpen');\n this.connected = true;\n this.trigger(WebSocketDriver.ON_CONNECTED);\n }\n\n _onClose() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onClose');\n this._disconnect();\n }\n\n _onError() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onError');\n }\n\n _disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::disconnect');\n\n this.connected = false;\n\n // reset handlers if websocket was created\n if (this.websocket !== null) {\n this.websocket.onmessage = () => {};\n this.websocket.onopen = () => {};\n this.websocket.onclose = () => {};\n this.websocket.onerror = () => {};\n this.websocket = null;\n }\n\n clearTimeout(this.closeTimeout);\n\n this.trigger(WebSocketDriver.ON_DISCONNECTED);\n }\n\n connect(host, port, secure) {\n if (this.connected) {\n return;\n }\n\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::connect', host, port);\n\n const url = `${secure ? 'wss' : 'ws'}://${host}:${port}/ws`;\n\n this.websocket = new WebSocket(url);\n this.websocket.onmessage = this._onMessage.bind(this);\n this.websocket.onopen = this._onOpen.bind(this);\n this.websocket.onclose = this._onClose.bind(this);\n this.websocket.onerror = this._onError.bind(this);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::disconnect');\n\n if (this.connected) {\n // ON_DISCONNECTED will be triggered at onClose event\n this.websocket.close();\n\n // websocket does not fire onclose if network connection is lost\n // set timeout to force fire ON_DISCONNECTED event\n this.closeTimeout = setTimeout(this._disconnect.bind(this), 750);\n } else {\n // disconnect instantly if websocket wasn't connected or still connecting\n this._disconnect();\n }\n }\n\n send(data, success = () => {}) {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::send', data);\n this.websocket.send(data);\n success();\n }\n\n static hasSupport() {\n return 'WebSocket' in globals;\n }\n}\n","import * as Logger from '../utils/logger';\n\nimport Transport from './base';\nimport Driver from '../drivers/base';\n\nconst COMMAND_CONNECT = 'connect';\nconst COMMAND_PASS = 'pass';\nconst COMMAND_POLL = 'poll';\n\nexport default class ProxyTransport extends Transport {\n constructor(config = {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::constructor', config);\n\n super(config);\n\n this.driver = config.driver || null;\n this.host = config.host || null;\n this.port = config.port || null;\n this.secure = config.secure || false;\n\n /*\n * Proxy properties\n * host and port should be always preserved on connect and reconnect\n * drop proxyIp, childId and clientId on reconnect and disconnect\n */\n\n this.proxyIp = null;\n this.childId = null;\n this.clientId = null;\n this.sessionId = null;\n\n this.driver.bind(Driver.ON_READY, this._handleDriverReady.bind(this));\n this.driver.bind(\n Driver.ON_CONNECTED,\n this._handleDriverConnected.bind(this),\n );\n this.driver.bind(\n Driver.ON_DISCONNECTED,\n this._handleDriverDisconnected.bind(this),\n );\n }\n\n _url() {\n return (\n `${this.secure ? 'https' : 'http'}://` +\n `${this.proxyIp ? this.proxyIp : this.host}:` +\n `${this.port}/` +\n `${this.childId !== null ? `${this.childId}/` : ''}` +\n `?_r=${new Date().getTime()}`\n );\n }\n\n _request(params = '', success = () => {}, failure = () => {}) {\n const self = this;\n\n const onSuccess = (response) => {\n // fire ON_MESSAGE event unless sscp message is empty\n if (response.sscp.constructor === String) {\n response.sscp = [response.sscp];\n }\n\n for (let i = 0, l = response.sscp.length; i < l; i++) {\n if (response.sscp[i] !== '') {\n self.trigger(ProxyTransport.ON_MESSAGE, response.sscp[i]);\n }\n }\n\n success(response);\n };\n\n const onFailure = () => {\n switch (self.state) {\n case ProxyTransport.STATE_CONNECTED:\n self.state = ProxyTransport.STATE_DISCONNECTING;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_CONNECTING:\n self.state = ProxyTransport.STATE_DISCONNECTING;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_DISCONNECTING:\n self.state = ProxyTransport.STATE_DISCONNECTED;\n self.trigger(ProxyTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n\n failure();\n };\n\n this.driver.send(this._url(), params, onSuccess, onFailure);\n }\n\n _poll() {\n const params =\n `command=${COMMAND_POLL}` +\n `&clientid=${this.clientId}` +\n `&sid=${this.sessionId}`;\n\n this._request(params, this._poll.bind(this));\n }\n\n _connect() {\n const self = this;\n\n const onSuccess = (response) => {\n self.proxyIp = response.proxy;\n self.clientId = parseInt(response.clientid, 10);\n self.childId = parseInt(response.childid, 10);\n self.sessionId = response.sid;\n\n self.state = ProxyTransport.STATE_CONNECTED;\n\n self.trigger(ProxyTransport.ON_CONNECTED);\n\n self._poll();\n };\n\n const onFailure = () => {\n self.state = ProxyTransport.STATE_DISCONNECTED;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n };\n\n const params = `command=${COMMAND_CONNECT}`;\n\n this._request(params, onSuccess, onFailure);\n }\n\n _handleDriverReady() {\n this.trigger(ProxyTransport.ON_READY);\n }\n\n _handleDriverConnected() {\n this._connect();\n }\n\n _handleDriverDisconnected() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'ProxyTransport::handleDriverDisconnected',\n );\n\n const { state } = this;\n\n this.state = ProxyTransport.STATE_DISCONNECTED;\n\n switch (state) {\n case ProxyTransport.STATE_CONNECTED:\n this.trigger(ProxyTransport.ON_CONNECT_LOST);\n break;\n case ProxyTransport.STATE_CONNECTING:\n this.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_DISCONNECTING:\n this.trigger(ProxyTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n }\n\n send(sscp, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::send', sscp);\n\n const params =\n `command=${COMMAND_PASS}` +\n `&clientid=${this.clientId}` +\n `&sscp=${sscp}` +\n `&sid=${this.sessionId}`;\n\n this._request(params, success, failure);\n }\n\n connect() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'ProxyTransport::connect',\n this.host,\n this.port,\n );\n\n this.state = ProxyTransport.STATE_CONNECTING;\n this.driver.connect();\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::disconnect');\n\n // drop proxy settings\n this.proxyIp = null;\n this.childId = null;\n this.sessionId = null;\n this.state = ProxyTransport.STATE_DISCONNECTING;\n\n this.driver.disconnect();\n }\n\n init() {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::init');\n\n this.driver.init();\n }\n}\n","import * as Logger from '../utils/logger';\n\nimport Transport from './base';\nimport Driver from '../drivers/base';\n\nexport default class SocketTransport extends Transport {\n constructor(config = {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::constructor', config);\n\n super();\n\n this.driver = config.driver || null;\n this.host = config.host || null;\n this.port = config.port || null;\n this.secure = config.secure || false;\n\n this.driver.bind(Driver.ON_READY, this._handleDriverReady.bind(this));\n this.driver.bind(Driver.ON_MESSAGE, this._handleDriverMessage.bind(this));\n this.driver.bind(\n Driver.ON_CONNECTED,\n this._handleDriverConnected.bind(this),\n );\n this.driver.bind(\n Driver.ON_DISCONNECTED,\n this._handleDriverDisconnected.bind(this),\n );\n }\n\n _handleDriverReady() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::_handleDriverReady');\n\n this.trigger(SocketTransport.ON_READY);\n }\n\n _handleDriverMessage(message) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::handleDriverMessage');\n\n this.trigger(SocketTransport.ON_MESSAGE, message);\n }\n\n _handleDriverConnected() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::handleDriverConnected');\n\n this.state = SocketTransport.STATE_CONNECTED;\n this.trigger(SocketTransport.ON_CONNECTED);\n }\n\n _handleDriverDisconnected() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'SocketTransport::handleDriverDisconnected',\n );\n\n const { state } = this;\n\n this.state = SocketTransport.STATE_DISCONNECTED;\n\n switch (state) {\n case SocketTransport.STATE_CONNECTED:\n this.trigger(SocketTransport.ON_CONNECT_LOST);\n break;\n case SocketTransport.STATE_CONNECTING:\n this.trigger(SocketTransport.ON_CONNECT_FAILED);\n break;\n case SocketTransport.STATE_DISCONNECTING:\n this.trigger(SocketTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n }\n\n send(sscp, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::send', sscp);\n this.driver.send(sscp, success, failure);\n }\n\n connect() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'SocketTransport::connect',\n this.host,\n this.port,\n );\n this.state = SocketTransport.STATE_CONNECTING;\n this.driver.connect(this.host, this.port, this.secure);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::disconnect');\n this.state = SocketTransport.STATE_DISCONNECTING;\n this.driver.disconnect();\n }\n\n init() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::init');\n this.driver.init();\n }\n}\n","import { Emitter } from '@monterosa/sdk-util';\n\nimport { ENMASSE_OVERRIDE_METHODS } from './settings';\nimport * as Logger from './utils/logger';\nimport XHRDriver from './drivers/xhr';\nimport WebSocketDriver from './drivers/websocket';\nimport Transport from './transports/base';\nimport ProxyTransport from './transports/proxy';\nimport SocketTransport from './transports/socket';\n\nconst METHOD_PROXY = 'proxy';\nconst METHOD_WEBSOCKET = 'websocket';\n\nclass TransportManager extends Emitter {\n constructor() {\n super();\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n\n this.ON_READY = 'ready';\n this.config = null;\n this.idx = 0;\n\n // list of connection types pairs: transport - driver\n this.methods = {};\n this.transports = {};\n this.loaded = 0;\n this.sequence = [];\n this.allowed = [];\n this.secure = true;\n\n // Guarding the use of the window object in environments where it might\n // not be available, such as during server - side rendering in a framework\n // like Next.js\n if (typeof window !== 'undefined') {\n this.secure = window.location.protocol.indexOf('https') === 0;\n }\n\n // list of connection methods which where unsuccessful\n this.unsuccessful = [];\n }\n\n _instantiate() {\n Logger.log(Logger.TYPE_MANAGER, 'TransportManager::instantiate');\n\n // instantiate all transports\n this.allowed.forEach((method) => {\n const config = this._getMethodConfig(method);\n\n // pick the random host\n const host =\n config.hosts[Math.floor(Math.random() * config.hosts.length)];\n\n const TransportKlass = this.methods[method].transport;\n const DriverKlass = this.methods[method].driver;\n\n const transport = new TransportKlass({\n driver: new DriverKlass(config.driver || {}),\n host,\n port: this.secure ? config.secure_port : config.port,\n secure: this.secure,\n });\n\n this.transports[method] = transport;\n\n transport.bind(Transport.ON_READY, this._handleTransportReady.bind(this));\n }, this);\n\n // initialise all transports\n for (const method in this.transports) {\n if (Object.prototype.hasOwnProperty.call(this.transports, method)) {\n this.transports[method].init();\n }\n }\n }\n\n _getMethodConfig(method) {\n return this.config.methods.find((item) => item.type === method);\n }\n\n _handleTransportReady() {\n this.loaded += 1;\n\n if (this.loaded === this.allowed.length) {\n this.trigger(this.ON_READY);\n }\n }\n\n current() {\n return this.transports[this.allowed[this.idx]];\n }\n\n next() {\n this.idx += 1;\n\n if (this.idx >= this.allowed.length) {\n return false;\n }\n\n return this.current();\n }\n\n reset() {\n this.allowed = [];\n this.unsuccessful = [];\n\n // gather all methods in one array in correct connection sequence\n for (let i = 0, l = this.sequence.length; i < l; i += 1) {\n // shift method's idx by the value of the current method idx\n const method = this.sequence[(i + this.idx) % l];\n\n if (this.methods[method].driver.hasSupport()) {\n this.allowed.push(method);\n }\n }\n\n this.idx = 0;\n }\n\n addUnsuccessful(transport) {\n for (const method in this.transports) {\n if (\n Object.prototype.hasOwnProperty.call(this.transports, method) &&\n this.transports[method] === transport\n ) {\n this.unsuccessful.push(method);\n }\n }\n }\n\n init(config = {}) {\n this.config = config;\n this.idx = 0;\n this.loaded = 0;\n this.sequence = [];\n this.secure = config.forceSecure === true ? true : this.secure;\n\n this.methods[METHOD_PROXY] = {\n driver: XHRDriver,\n transport: ProxyTransport,\n };\n this.methods[METHOD_WEBSOCKET] = {\n driver: WebSocketDriver,\n transport: SocketTransport,\n };\n\n if (ENMASSE_OVERRIDE_METHODS) {\n this.sequence = ENMASSE_OVERRIDE_METHODS;\n } else {\n this.config.methods.forEach(\n (method) => this.sequence.push(method.type),\n this,\n );\n }\n\n // remove unsupported methods\n /* eslint-disable */\n this.sequence = this.sequence.filter((item) =>\n Object.prototype.hasOwnProperty.call(this.methods, item),\n );\n /* eslint-enable */\n\n this.reset();\n\n this._instantiate();\n }\n}\n\nexport default new TransportManager();\n","/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"variables\": false }] */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport * as Logger from './utils/logger';\nimport * as Time from './utils/time';\nimport Transport from './transports/base';\nimport TransportManager from './transport_manager';\n\nconst ConnectionManager = (() => {\n const self = new Emitter();\n\n self.trigger = self.emit;\n self.bind = self.on;\n self.unbind = self.off;\n\n /*\n * Constants\n */\n const CONNECT_DELAYS = [0, 3, 5, 10, 20, 30, 45, 60];\n\n /*\n * States\n */\n self.STATE_DISCONNECTED = 'state_disconnected';\n self.STATE_DISCONNECTING = 'state_disconnecting';\n self.STATE_CONNECTING = 'state_connecting';\n self.STATE_CONNECTED = 'state_connected';\n\n /*\n * Events\n */\n self.ON_MESSAGE = 'message';\n self.ON_STATE = 'state';\n\n /*\n * Private variables\n */\n let config = null;\n let state = self.STATE_DISCONNECTED;\n let transport = null;\n let attempt = 1;\n\n // Timestamp to track when the app was backgrounded\n let backgroundedAt = null;\n\n const inactivityTimeout = {\n start() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::start',\n );\n\n const stamp = Time.now();\n\n this.interval = setInterval(() => {\n if (Time.now() - stamp >= config.inactivity_timeout) {\n this.resolve();\n }\n }, 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::stop',\n );\n\n clearInterval(this.interval);\n },\n\n reset() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::reset',\n );\n\n this.stop();\n this.start();\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::resolve',\n );\n\n disconnectingOnConnectLost();\n },\n };\n\n const connectTimeout = {\n start() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::start',\n );\n\n this.timeout = setTimeout(() => {\n this.resolve();\n }, config.connect_timeout * 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::stop',\n );\n\n clearTimeout(this.timeout);\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::resolve',\n );\n\n disconnectingOnConnectFailed();\n },\n };\n\n const connectDelay = {\n active: false,\n\n start(delay) {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::start',\n );\n\n this.active = true;\n this.timeout = setTimeout(() => {\n this.resolve();\n }, delay * 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::stop',\n );\n\n this.active = false;\n clearTimeout(this.timeout);\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::resolve',\n );\n\n this.stop();\n connect();\n },\n };\n\n const initTransport = (newTransport) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::initTransport');\n\n transport = newTransport;\n\n transport.bind(Transport.ON_MESSAGE, handleTransportMessage);\n transport.bind(Transport.ON_CONNECTED, handleTransportConnected);\n transport.bind(Transport.ON_CONNECT_FAILED, handleTransportConnectFailed);\n transport.bind(Transport.ON_CONNECT_LOST, handleTransportConnectLost);\n transport.bind(Transport.ON_DISCONNECTED, handleTransportDisconnected);\n };\n\n const teardownTransport = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::teardownTransport');\n\n if (transport === null) {\n return;\n }\n\n transport.unbind(Transport.ON_MESSAGE, handleTransportMessage);\n transport.unbind(Transport.ON_CONNECTED, handleTransportConnected);\n transport.unbind(Transport.ON_CONNECT_FAILED, handleTransportConnectFailed);\n transport.unbind(Transport.ON_CONNECT_LOST, handleTransportConnectLost);\n transport.unbind(Transport.ON_DISCONNECTED, handleTransportDisconnected);\n\n transport = null;\n };\n\n const handleTransportMessage = (message) => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportMessage',\n message,\n );\n\n const messages = message.split('\\0');\n\n for (let i = 0; i < messages.length; i += 1) {\n if (messages[i].length > 0) {\n inactivityTimeout.reset();\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportMessage',\n 'send upstream m:',\n messages[i],\n );\n self.trigger(self.ON_MESSAGE, messages[i]);\n }\n }\n };\n\n const handleTransportConnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnected',\n );\n setStateToConnected();\n };\n\n const handleTransportConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnectFailed',\n );\n disconnectingOnConnectFailed();\n };\n\n const handleTransportConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnectLost',\n );\n disconnectingOnConnectLost();\n };\n\n const handleTransportDisconnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportDisconnected',\n );\n\n switch (state) {\n case self.STATE_CONNECTED:\n disconnectedOnConnectLost();\n break;\n case self.STATE_CONNECTING:\n disconnectedOnConnectFailed();\n break;\n case self.STATE_DISCONNECTING:\n setStateToDisconnected();\n break;\n default:\n break;\n }\n };\n\n const disconnectingOnConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectingOnConnectFailed()',\n );\n\n disconnect();\n };\n\n const disconnectingOnConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectingOnConnectLost()',\n );\n\n disconnect();\n };\n\n const disconnectedOnConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectedOnConnectLost()',\n );\n\n teardownTransport();\n\n // automatically reconnect\n setStateToConnecting();\n };\n\n const disconnectedOnConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectedOnConnectFailed()',\n );\n\n TransportManager.addUnsuccessful(transport);\n\n teardownTransport();\n\n if (TransportManager.next() === false) {\n setStateToConnecting();\n } else {\n connect();\n }\n };\n\n const setStateToConnecting = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToConnecting()',\n );\n\n let delay;\n\n if (attempt >= CONNECT_DELAYS.length) {\n delay = CONNECT_DELAYS[CONNECT_DELAYS.length - 1];\n } else {\n delay = CONNECT_DELAYS[attempt - 1];\n }\n\n state = self.STATE_CONNECTING;\n self.trigger(self.ON_STATE, state, attempt, delay);\n\n TransportManager.reset();\n\n attempt += 1;\n connectDelay.start(delay);\n };\n\n const setStateToConnected = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::setStateToConnected()');\n\n attempt = 1;\n TransportManager.reset();\n inactivityTimeout.reset();\n connectTimeout.stop();\n connectDelay.stop();\n\n state = self.STATE_CONNECTED;\n self.trigger(self.ON_STATE, state);\n };\n\n const setStateToDisconnecting = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToDisconnecting()',\n );\n\n state = self.STATE_DISCONNECTING;\n self.trigger(self.ON_STATE, state);\n\n disconnect();\n };\n\n const setStateToDisconnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToDisconnected()',\n );\n\n attempt = 1;\n teardownTransport();\n TransportManager.reset();\n\n state = self.STATE_DISCONNECTED;\n self.trigger(self.ON_STATE, state);\n };\n\n const connect = () => {\n if (state === self.STATE_CONNECTING) {\n connectTimeout.start();\n initTransport(TransportManager.current());\n transport.connect();\n }\n };\n\n const disconnect = () => {\n inactivityTimeout.stop();\n connectTimeout.stop();\n connectDelay.stop();\n\n if (transport) {\n transport.disconnect();\n } else {\n setStateToDisconnected();\n }\n };\n\n /**\n * Handles changes in the document's visibility state (visible/hidden).\n *\n * - Tracks when the document is backgrounded by recording the timestamp.\n * - When the document becomes visible again, checks if the time spent in the background\n * exceeds a configured timeout. If it does, the connection is disconnected.\n * - Ensures actions are only taken if necessary, based on the current connection state\n * and whether the page was previously backgrounded.\n *\n * Note on Safari (ios and desktop) and Firefox quirk: visibilitychange event is fired\n * immidiately when the page is loaded, even if the page is visible.\n */\n const handleVisibilityChange = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleVisibilityChange()',\n document.visibilityState,\n );\n\n switch (document.visibilityState) {\n case 'visible':\n if (backgroundedAt === null) {\n return;\n }\n\n if (state !== self.STATE_CONNECTED) {\n return;\n }\n\n if (Date.now() - backgroundedAt > config.background_timeout * 1000) {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleVisibilityChange()',\n 'disconnecting due to background timeout',\n );\n\n disconnect();\n }\n\n backgroundedAt = null;\n break;\n case 'hidden':\n backgroundedAt = Date.now();\n break;\n }\n };\n\n const handleNetworkStatus = () => {\n if (!navigator.onLine && state === self.STATE_CONNECTED) {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleNetworkStatus()',\n 'disconnecting due to network loss',\n );\n disconnect();\n }\n };\n\n self.connect = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::connect()');\n\n // resolve connect instantly if the process has been already postponed\n if (connectDelay.active) {\n connectDelay.resolve();\n } else if (state === self.STATE_DISCONNECTED) {\n setStateToConnecting();\n }\n\n window.addEventListener('online', handleNetworkStatus);\n window.addEventListener('offline', handleNetworkStatus);\n window.addEventListener('visibilitychange', handleVisibilityChange);\n };\n\n self.disconnect = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::disconnect()');\n\n setStateToDisconnecting();\n\n window.removeEventListener('online', handleNetworkStatus);\n window.removeEventListener('offline', handleNetworkStatus);\n window.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n\n self.send = (sscp, success, failure) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::send', sscp);\n success = success || (() => {});\n failure = failure || (() => {});\n transport.send(sscp, success, failure);\n };\n\n self.getConnectAttempt = () => attempt;\n\n self.init = (cfg) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::init()', cfg);\n config = cfg;\n };\n\n return self;\n})();\n\nexport default ConnectionManager;\n","/* eslint-disable no-console */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\n\nclass Demographics extends Emitter {\n constructor(...args) {\n super(...args);\n\n this.ON_ADD_COUNTER = 'add-counter';\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n\n addCounter(\n channel,\n eventId,\n segment,\n counter,\n round = null,\n min = null,\n max = null,\n ) {\n Logger.log(\n Logger.TYPE_SERVICE,\n 'Demographics::addCounter',\n channel,\n eventId,\n segment,\n counter,\n round,\n min,\n max,\n );\n\n if (!channel) {\n return;\n }\n\n if (!eventId) {\n return;\n }\n\n if (\n !segment ||\n segment.constructor !== Array ||\n !segment.length ||\n segment.length % 2 !== 0\n ) {\n return;\n }\n\n if (counter !== parseInt(counter, 10)) {\n return;\n }\n\n const keys = segment.filter((v, i) => (i + 1) % 2).join(':');\n const values = segment.filter((v, i) => i % 2).join(':');\n\n this.trigger(this.ON_ADD_COUNTER, channel, [\n eventId,\n min,\n max,\n round,\n keys,\n values,\n counter,\n ]);\n }\n}\n\nexport default new Demographics();\n","/* eslint-disable no-console */\n\nimport { Emitter, getItem, getErrorMessage } from '@monterosa/sdk-util';\nimport {\n storageRead,\n storageWrite,\n storageRemove,\n} from '@monterosa/sdk-storage-kit';\nimport { getParentApplication } from '@monterosa/sdk-launcher-kit';\n\nimport {\n ENMASSE_CONFIG,\n SSCP_KLASS_AUTH,\n SSCP_KLASS_AUTHR,\n SSCP_KLASS_AUTHOK,\n SSCP_KLASS_PING,\n SSCP_KLASS_EOC,\n SSCP_KLASS_SUB,\n SSCP_KLASS_UNSUB,\n SSCP_KLASS_LOGIN,\n SSCP_KLASS_LOGIN_OK,\n SSCP_KLASS_LOGIN_FAIL,\n SSCP_KLASS_COUNTER,\n} from './settings';\nimport { version } from '../package.json';\nimport * as Logger from './utils/logger';\nimport Queue from './utils/queue';\nimport * as Time from './utils/time';\nimport ConnectionManager from './connection_manager';\nimport TransportManager from './transport_manager';\nimport Demographics from './services/demographics';\n\nconst Enmasse = (() => {\n /*\n * Link to the scope\n */\n\n const self = new Emitter();\n\n self.trigger = self.emit;\n self.bind = self.on;\n self.unbind = self.off;\n\n /*\n * Constants\n */\n\n self.VERSION = version;\n self.PROTOCOL_VERSION = '8';\n\n self.SSCP_KLASS_AUTH = SSCP_KLASS_AUTH;\n self.SSCP_KLASS_AUTHR = SSCP_KLASS_AUTHR;\n self.SSCP_KLASS_AUTHOK = SSCP_KLASS_AUTHOK;\n self.SSCP_KLASS_PING = SSCP_KLASS_PING;\n self.SSCP_KLASS_SUB = SSCP_KLASS_SUB;\n self.SSCP_KLASS_UNSUB = SSCP_KLASS_UNSUB;\n self.SSCP_KLASS_EOC = SSCP_KLASS_EOC;\n self.SSCP_KLASS_LOGIN = SSCP_KLASS_LOGIN;\n self.SSCP_KLASS_COUNTER = SSCP_KLASS_COUNTER;\n\n self.ON_STATE = 'on_state';\n self.ON_MESSAGE = 'on_message';\n self.ON_EOC = 'on_eoc';\n self.ON_READY = 'on_ready';\n self.ON_ERROR = 'on_error';\n\n self.STATE_DISCONNECTED = 'disconnected';\n self.STATE_CONNECTED = 'connected';\n self.STATE_CONNECTING = 'connecting';\n\n self.Demographics = Demographics;\n\n // var CALLBACK_NAME = \"__enmasse_callback\";\n // var CONFIG_TIMEOUT = 5000;\n\n const PARAM_SESSION_ID = 'enmasse_session_id';\n\n /*\n * Enmasse properties\n */\n\n // Link to the config file.\n let configFile = null;\n\n // list of arbitray data passed into handshake\n // message along with the protocol version\n let info = [];\n\n // session id is generated by server and passed\n // on client on handshake\n let sessionId = null;\n\n // out messages queue\n let queue = null;\n\n // current state of the state machine\n let state = self.STATE_DISCONNECTED;\n\n // system channel\n let sysChannel = null;\n\n // force secure connection\n let forceSecure = false;\n\n // sign in promise object\n let loginContext = {\n inProgress: false,\n success: () => {},\n failure: () => {},\n };\n\n /*\n * Private methods\n */\n\n const storeSession = async (id) => {\n try {\n await storageWrite(PARAM_SESSION_ID, id);\n } catch (err) {\n console.error(\n `Failed to persist session to shared storage: ${getErrorMessage(err)}`,\n );\n }\n };\n\n const restoreSession = async () => {\n let restoredId = null;\n\n // Read session from shared storage\n try {\n restoredId = await storageRead(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to read session from shared storage: ${getErrorMessage(err)}`,\n );\n }\n\n if (restoredId !== null) {\n return restoredId;\n }\n\n /**\n * Further down is a special case when we try to restore session id from the\n * local storage and save it to the shared storage. This could happen in\n * previous versions of the SDK when we didn't have a shared storage.\n */\n\n if (getParentApplication() === null) {\n return null;\n }\n\n try {\n restoredId = getItem(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to read local session during migration: ${getErrorMessage(\n err,\n )}`,\n );\n }\n\n if (restoredId === null) {\n return null;\n }\n\n try {\n await storageWrite(PARAM_SESSION_ID, restoredId);\n } catch (err) {\n console.error(\n `Failed to persist session to shared storage during migration: ${getErrorMessage(\n err,\n )}`,\n );\n }\n\n return restoredId;\n };\n\n const resetSession = async () => {\n sessionId = null;\n\n try {\n await storageRemove(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to remove session from shared storage: ${getErrorMessage(err)}`,\n );\n }\n };\n\n const validateSession = (id) =>\n // eslint-disable-next-line\n /^[a-f\\d]{8}\\-[a-f\\d]{4}\\-[a-f\\d]{4}-[a-f\\d]{4}\\-[a-f\\d]{12}$/i.test(id);\n\n const finaliseLogin = (callback) => {\n if (loginContext.inProgress === false) {\n return;\n }\n\n loginContext = {\n inProgress: false,\n success: () => {},\n failure: () => {},\n };\n\n callback();\n };\n\n const resolveLogin = () => {\n finaliseLogin(loginContext.success);\n };\n\n const rejectLogin = () => {\n finaliseLogin(loginContext.failure);\n };\n\n const setStateToDisconnected = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToDisconnected()');\n\n state = self.STATE_DISCONNECTED;\n sysChannel = null;\n\n rejectLogin();\n\n self.trigger(self.ON_STATE, state);\n };\n\n const setStateToConnected = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToConnected()');\n\n const time = Time.now();\n state = self.STATE_CONNECTED;\n self.trigger(self.ON_STATE, state, time);\n };\n\n const setStateToConnecting = (attempt, delay) => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToConnecting()');\n\n state = self.STATE_CONNECTING;\n rejectLogin();\n\n self.trigger(self.ON_STATE, state, attempt, delay);\n };\n\n const parseSSCP = (sscp) => {\n const data = {\n channel: 0,\n klass: '',\n sent_at: 0,\n body: [],\n };\n\n const separator1 = sscp.indexOf('/');\n\n if (separator1 !== -1) {\n const separator2 = sscp.indexOf('/', separator1 + 1);\n\n if (separator2 !== -1) {\n data.channel = sscp.substr(0, separator1);\n data.klass = sscp.substr(separator1 + 1, separator2 - separator1 - 1);\n\n const separator3 = sscp.indexOf('/', separator2 + 1);\n\n if (separator3 !== -1) {\n data.sent_at = parseInt(\n sscp.substr(separator2 + 1, separator3 - separator2 - 1),\n 10,\n );\n\n const body = sscp.substr(separator3 + 1);\n\n if (body !== '') {\n const values = body.split('|');\n\n for (let i = 0, l = values.length; i < l; i += 1) {\n data.body[i] = decodeURIComponent(values[i]);\n }\n }\n }\n }\n }\n\n return data;\n };\n\n const stringifySSCP = (message) =>\n [\n message.channel,\n message.klass,\n Math.floor(new Date() / 1000),\n message.body.join('|'),\n ].join('/');\n\n const runner = (message) => {\n const success = () => {\n queue.success();\n };\n\n const failure = () => {\n queue.failure();\n };\n\n ConnectionManager.send(stringifySSCP(message), success, failure);\n };\n\n const handleTransportManagerReady = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::handleTransportManagerReady');\n self.trigger(self.ON_READY);\n };\n\n const handleConnectionManagerState = (...args) => {\n Logger.log(\n Logger.TYPE_PROTOCOL,\n 'Enmasse::handleConnectionManagerState',\n args,\n );\n\n switch (args[0]) {\n // case ConnectionManager.STATE_DISCONNECTING:\n // break;\n case ConnectionManager.STATE_DISCONNECTED:\n setStateToDisconnected();\n break;\n case ConnectionManager.STATE_CONNECTING:\n setStateToConnecting(args[1], args[2]);\n break;\n case ConnectionManager.STATE_CONNECTED:\n break;\n default:\n break;\n }\n };\n\n const handleConnectionManagerMessage = async (message) => {\n Logger.log(\n Logger.TYPE_PROTOCOL,\n 'Enmasse::handleConnectionManagerMessage',\n message,\n );\n\n const data = parseSSCP(message);\n\n switch (data.klass) {\n case SSCP_KLASS_AUTH: {\n const time = data.sent_at;\n\n const clientInfo = [\n `enmassejs-${self.VERSION}`,\n navigator.userAgent,\n ].concat(info);\n\n // store system channel\n sysChannel = data.channel;\n\n // url encode each client info item\n clientInfo.forEach((item, idx) => {\n clientInfo[idx] = encodeURIComponent(item);\n });\n\n if (sessionId === null) {\n [sessionId] = data.body;\n await storeSession(sessionId);\n }\n\n Time.setTime(time);\n\n queue.stash();\n\n queue.push(\n {\n channel: sysChannel,\n klass: SSCP_KLASS_AUTHR,\n body: [sessionId, self.PROTOCOL_VERSION, clientInfo.join(',')],\n },\n true,\n );\n\n queue.run();\n\n break;\n }\n case SSCP_KLASS_AUTHOK: {\n // We have to resubscribe to the previously\n // subscribed channels after the reconnect.\n const subscriptions = queue.getSubscriptions();\n\n subscriptions.forEach((channel) => {\n queue.push(\n {\n channel,\n klass: SSCP_KLASS_SUB,\n body: [],\n },\n true,\n );\n });\n\n queue.unstash();\n queue.run();\n\n setStateToConnected();\n break;\n }\n case SSCP_KLASS_LOGIN_OK:\n resolveLogin();\n break;\n case SSCP_KLASS_LOGIN_FAIL:\n rejectLogin();\n break;\n case SSCP_KLASS_PING:\n // ignoring ping message handling\n break;\n case SSCP_KLASS_EOC:\n self.trigger(self.ON_EOC, data.channel);\n break;\n default:\n self.trigger(self.ON_MESSAGE, data);\n break;\n }\n };\n\n const handleDemographicsCounter = (channel, data) => {\n self.send(channel, 'avgcounter', data);\n };\n\n /**\n * @internal\n */\n self.PARAM_SESSION_ID = PARAM_SESSION_ID;\n\n /**\n * @internal\n */\n self.resetSession = resetSession;\n\n /*\n * Public methods\n */\n\n self.connect = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::connect');\n\n ConnectionManager.connect();\n };\n\n self.disconnect = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse:disconnect');\n\n ConnectionManager.disconnect();\n };\n\n self.send = (channel, klass, body) => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::send', channel, klass, body);\n\n body = body || [];\n\n queue.push({\n channel,\n klass,\n body,\n });\n\n if (state === self.STATE_CONNECTED) {\n queue.run();\n }\n };\n\n self.getSessionId = () => sessionId;\n\n self.getState = () => state;\n\n self.subscribe = (channel) => {\n self.send(channel, SSCP_KLASS_SUB);\n };\n\n self.unsubscribe = (channel) => {\n self.send(channel, SSCP_KLASS_UNSUB);\n };\n\n self.login = (\n userId,\n timestamp,\n signature,\n success = () => {},\n failure = () => {},\n ) => {\n if (sysChannel === null) {\n return;\n }\n\n if (loginContext.inProgress) {\n console.warn('Login is already in progress');\n return;\n }\n\n loginContext = { inProgress: true, success, failure };\n\n self.send(sysChannel, SSCP_KLASS_LOGIN, [userId, timestamp, signature]);\n };\n\n self.signIn = (...args) => {\n console.warn(\n // eslint-disable-next-line\n `signIn() method is deprecated and will be removed in future versions. Please use login() method instead`,\n );\n\n self.login(args);\n };\n\n self.init = async function init(config = () => {}) {\n // config file is passed either as GET parameter or via constructor\n configFile = !ENMASSE_CONFIG ? config.config || null : ENMASSE_CONFIG;\n info = config.info || [];\n sessionId = await restoreSession();\n\n if (typeof config.forceSecure === 'boolean') {\n forceSecure = config.forceSecure;\n }\n\n if (configFile === null) {\n // eslint-disable-next-line\n throw 'Enmasse config file is not set';\n }\n\n // If session id has invalid format\n if (sessionId !== null && !validateSession(sessionId)) {\n await resetSession();\n }\n\n queue = new Queue({\n runner,\n });\n\n TransportManager.bind(\n TransportManager.ON_READY,\n handleTransportManagerReady,\n );\n ConnectionManager.bind(\n ConnectionManager.ON_STATE,\n handleConnectionManagerState,\n );\n ConnectionManager.bind(\n ConnectionManager.ON_MESSAGE,\n handleConnectionManagerMessage,\n );\n Demographics.bind(Demographics.ON_ADD_COUNTER, handleDemographicsCounter);\n\n try {\n const response = await fetch(configFile);\n\n const { status, statusText: text } = response;\n\n let data;\n\n try {\n data = await response.json();\n } catch (jsonErr) {\n self.trigger(self.ON_ERROR, `Invalid JSON from config ${configFile}`);\n return;\n }\n\n const isSuccess =\n (status >= 200 && status <= 300) ||\n // If you conclude with an XMLHttpRequest receiving status=0 and\n // statusText=null, this means the request was not allowed to be\n // performed.\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#xmlhttprequests_being_stopped\n (status === 0 && !!text) ||\n status === '';\n\n data.forceSecure = forceSecure;\n\n if (data.background_timeout === undefined) {\n data.background_timeout = 0;\n }\n\n if (isSuccess) {\n ConnectionManager.init(data);\n TransportManager.init(data);\n } else {\n self.trigger(self.ON_ERROR, `Failed to load config ${configFile}`);\n }\n } catch (err) {\n self.trigger(self.ON_ERROR, `Error loading config: ${err.message}`);\n }\n };\n\n return self;\n})();\n\nexport default Enmasse;\n"],"names":["ARG_OVERRIDE_METHODS","ARG_DEBUG","ARG_CONFIG","SSCP_KLASS_AUTH","SSCP_KLASS_AUTHR","SSCP_KLASS_AUTHOK","SSCP_KLASS_PING","SSCP_KLASS_SUB","SSCP_KLASS_UNSUB","SSCP_KLASS_EOC","SSCP_KLASS_LOGIN","SSCP_KLASS_LOGIN_OK","SSCP_KLASS_LOGIN_FAIL","SSCP_KLASS_COUNTER","getSettingFor","name","checkStorageAvailability","value","getStorageItem","window","URL","location","href","searchParams","has","get","getSettingForMethods","split","undefined","ENMASSE_OVERRIDE_METHODS","ENMASSE_DEBUG","ENMASSE_CONFIG","TYPE_PROTOCOL","TYPE_MANAGER","TYPE_TRANSPORT","TYPE_DRIVER","TYPE_QUEUE","TYPE_TIME","TYPE_MANAGER_EXTRA","TYPE_DRIVER_EXTRA","TYPE_SERVICE","LEVELS","brief","full","exhaustive","log","console","args","type","rest","slice","Queue","config","queue","stashed","running","runner","subscriptions","message","force","Logger","klass","channel","indexOf","push","index","splice","shift","run","item","local","Date","serverTime","clientTimeAtSync","setTime","newTime","now","elapsedTime","Math","round","Transport","state","STATE_DISCONNECTED","trigger","emit","bind","on","unbind","off","Emitter","Driver","connected","ON_READY","globals","getGlobal","XHRDriver","requests","requestIdx","url","success","failure","abort","self","xhr","XMLHttpRequest","method","XDomainRequest","open","setRequestHeader","_idx","onload","onLoad","responseText","length","_parseResponse","onerror","onError","_onabort","response","data","chunks","i","l","key","normalisedValue","decodeURIComponent","replace","constructor","Array","idx","Object","prototype","hasOwnProperty","call","ON_CONNECTED","_removeRequest","ON_DISCONNECTED","retry","send","_request","onSuccess","onFailure","onAbort","setTimeout","request_retries","request_retry_delay","WebSocketDriver","websocket","closeTimeout","e","ON_MESSAGE","_disconnect","onmessage","onopen","onclose","clearTimeout","host","port","secure","WebSocket","_onMessage","_onOpen","_onClose","_onError","close","COMMAND_CONNECT","COMMAND_PASS","COMMAND_POLL","ProxyTransport","driver","proxyIp","childId","clientId","sessionId","_handleDriverReady","_handleDriverConnected","_handleDriverDisconnected","getTime","params","sscp","String","STATE_CONNECTED","STATE_DISCONNECTING","ON_CONNECT_FAILED","STATE_CONNECTING","_url","_poll","proxy","parseInt","clientid","childid","sid","_connect","ON_CONNECT_LOST","connect","disconnect","init","SocketTransport","_handleDriverMessage","METHOD_PROXY","METHOD_WEBSOCKET","TransportManager","methods","transports","loaded","sequence","allowed","protocol","unsuccessful","forEach","_getMethodConfig","hosts","floor","random","TransportKlass","transport","DriverKlass","secure_port","_handleTransportReady","find","current","hasSupport","forceSecure","filter","reset","_instantiate","ConnectionManager","CONNECT_DELAYS","ON_STATE","attempt","backgroundedAt","inactivityTimeout","start","stamp","Time","interval","setInterval","inactivity_timeout","resolve","stop","clearInterval","disconnectingOnConnectLost","connectTimeout","timeout","connect_timeout","disconnectingOnConnectFailed","connectDelay","active","delay","initTransport","newTransport","handleTransportMessage","handleTransportConnected","handleTransportConnectFailed","handleTransportConnectLost","handleTransportDisconnected","teardownTransport","messages","setStateToConnected","disconnectedOnConnectLost","disconnectedOnConnectFailed","setStateToDisconnected","setStateToConnecting","addUnsuccessful","next","setStateToDisconnecting","handleVisibilityChange","document","visibilityState","background_timeout","handleNetworkStatus","navigator","onLine","addEventListener","removeEventListener","getConnectAttempt","cfg","Demographics","ON_ADD_COUNTER","eventId","segment","counter","min","max","keys","v","join","values","Enmasse","VERSION","version","PROTOCOL_VERSION","ON_EOC","ON_ERROR","PARAM_SESSION_ID","configFile","info","sysChannel","loginContext","inProgress","storeSession","id","storageWrite","error","getErrorMessage","restoreSession","restoredId","storageRead","getParentApplication","getItem","err","resetSession","storageRemove","validateSession","test","finaliseLogin","callback","resolveLogin","rejectLogin","time","parseSSCP","sent_at","body","separator1","separator2","substr","separator3","stringifySSCP","handleTransportManagerReady","handleConnectionManagerState","handleConnectionManagerMessage","clientInfo","userAgent","concat","encodeURIComponent","stash","getSubscriptions","unstash","handleDemographicsCounter","getSessionId","getState","subscribe","unsubscribe","login","userId","timestamp","signature","warn","signIn","fetch","status","text","statusText","json","isSuccess"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm5.js","sources":["../src/settings.js","../src/utils/logger.js","../src/utils/queue.js","../src/utils/time.js","../src/transports/base.js","../src/drivers/base.js","../src/drivers/xhr.js","../src/drivers/websocket.js","../src/transports/proxy.js","../src/transports/socket.js","../src/transport_manager.js","../src/connection_manager.js","../src/services/demographics.js","../src/index.js"],"sourcesContent":["import {\n getItem as getStorageItem,\n checkAvailability as checkStorageAvailability,\n} from '@monterosa/sdk-util';\n\nconst ARG_OVERRIDE_METHODS = 'enmasse_override_methods';\nconst ARG_DEBUG = 'enmasse_debug';\nconst ARG_CONFIG = 'enmasse_config';\n\nexport const SSCP_KLASS_AUTH = 'auth';\nexport const SSCP_KLASS_AUTHR = 'authr';\nexport const SSCP_KLASS_AUTHOK = 'authok';\nexport const SSCP_KLASS_PING = 'ping';\nexport const SSCP_KLASS_SUB = 'sub';\nexport const SSCP_KLASS_UNSUB = 'unsub';\nexport const SSCP_KLASS_EOC = 'eoc';\nexport const SSCP_KLASS_LOGIN = 'login';\nexport const SSCP_KLASS_LOGIN_OK = 'login_ok';\nexport const SSCP_KLASS_LOGIN_FAIL = 'login_fail';\nexport const SSCP_KLASS_COUNTER = 'counter';\n\nconst getSettingFor = (name) => {\n if (checkStorageAvailability()) {\n const value = getStorageItem(name);\n\n if (value !== null) {\n return value;\n }\n }\n\n // Guarding the use of the window object in environments where it might not be\n // available, such as during server - side rendering in a framework like Next.js\n if (typeof window === 'undefined') {\n return null;\n }\n\n const { searchParams } = new URL(window.location.href);\n\n if (searchParams.has(name)) {\n return searchParams.get(name);\n }\n\n return false;\n};\n\nconst getSettingForMethods = () => {\n const value = getSettingFor(ARG_OVERRIDE_METHODS);\n\n if (typeof value === 'string') {\n return value.split(',');\n }\n\n return undefined;\n};\n\nexport const ENMASSE_OVERRIDE_METHODS = getSettingForMethods();\nexport const ENMASSE_DEBUG = getSettingFor(ARG_DEBUG);\nexport const ENMASSE_CONFIG = getSettingFor(ARG_CONFIG);\n","/* eslint no-bitwise: \"off\" */\n/* eslint-disable no-console */\n\nimport { getErrorMessage } from '@monterosa/sdk-util';\n\nimport { ENMASSE_DEBUG } from '../settings';\n\nexport const TYPE_PROTOCOL = 1; // 0000 0000 0001\nexport const TYPE_MANAGER = 2; // 0000 0000 0010\nexport const TYPE_TRANSPORT = 4; // 0000 0000 0100\nexport const TYPE_DRIVER = 8; // 0000 0000 1000\nexport const TYPE_QUEUE = 16; // 0000 0001 0000\nexport const TYPE_TIME = 32; // 0000 0010 0000\nexport const TYPE_MANAGER_EXTRA = 64; // 0000 0100 0000\nexport const TYPE_DRIVER_EXTRA = 128; // 0000 1000 0000\nexport const TYPE_SERVICE = 256; // 0001 0000 0000\n\nconst LEVELS = {\n brief: TYPE_PROTOCOL,\n full: TYPE_PROTOCOL | TYPE_MANAGER | TYPE_TRANSPORT | TYPE_DRIVER,\n exhaustive:\n TYPE_PROTOCOL |\n TYPE_MANAGER |\n TYPE_MANAGER_EXTRA |\n TYPE_TRANSPORT |\n TYPE_DRIVER |\n TYPE_DRIVER_EXTRA |\n TYPE_QUEUE |\n TYPE_TIME |\n TYPE_SERVICE,\n};\n\n// eslint-disable-next-line\nlet log = () => {};\n\nif (ENMASSE_DEBUG) {\n log = (...args) => {\n if (typeof console === 'undefined' || !console.log) {\n return;\n }\n\n // parse arguments\n // var args = Array.prototype.slice.call(arguments);\n\n // the first argument is the debug type\n const [type] = args;\n\n // the rest of arguments are arbitrary data\n const rest = args.slice(1);\n\n // const time = ['getMinutes', 'getSeconds']\n // .map((f) => new Date()[f]())\n // .map((v) => (v < 10 ? '0' : '') + v)\n // .join(':');\n\n // add current time\n // rest.unshift(time);\n\n // do not log if mask doesn't contain current type\n if ((LEVELS[ENMASSE_DEBUG] & type) === 0) {\n return;\n }\n\n console.log(...rest);\n };\n}\n\nfunction logError(message, err) {\n console.error(`EnMasse: ${message}: ${getErrorMessage(err)}`);\n}\n\nexport { log, logError };\n","import * as Logger from './logger';\nimport {\n SSCP_KLASS_LOGIN,\n SSCP_KLASS_AUTHR,\n SSCP_KLASS_SUB,\n SSCP_KLASS_UNSUB,\n} from '../settings';\n\nexport default class Queue {\n constructor(config = {}) {\n // the main storage for messages\n this.queue = [];\n\n // stash of the queue\n this.stashed = [];\n\n this.running = false;\n\n this.runner = typeof config.runner === 'function' ? config.runner : null;\n\n // list of channels we subscribed to\n this.subscriptions = [];\n }\n\n push(message, force = false) {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::push', message, force);\n\n const { klass, channel } = message;\n\n if (!force) {\n switch (klass) {\n case SSCP_KLASS_LOGIN:\n case SSCP_KLASS_AUTHR:\n break;\n case SSCP_KLASS_SUB:\n if (this.subscriptions.indexOf(channel) === -1) {\n this.subscriptions.push(channel);\n } else {\n return;\n }\n break;\n case SSCP_KLASS_UNSUB: {\n const index = this.subscriptions.indexOf(channel);\n\n if (index !== -1) {\n this.subscriptions.splice(index, 1);\n } else {\n return;\n }\n break;\n }\n default:\n if (this.subscriptions.indexOf(channel) === -1) {\n return;\n }\n break;\n }\n }\n\n this.queue.push(message);\n }\n\n getSubscriptions() {\n return this.subscriptions;\n }\n\n run() {\n Logger.log(\n Logger.TYPE_QUEUE,\n 'Queue::run',\n `running=${this.running}, head=${this.queue[0]}`,\n );\n\n // abort if whether\n // 1. runner function is not set\n // 2. OR queue is already running\n // 3. OR there is no messages in the queue\n if (this.runner === null || this.running || !this.queue[0]) {\n return;\n }\n\n this.running = true;\n\n this.runner(this.queue.shift());\n }\n\n success() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::success');\n\n this.running = false;\n\n this.run();\n }\n\n failure() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::failure');\n\n this.running = false;\n }\n\n stash() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::stash');\n\n let item;\n\n // eslint-disable-next-line\n while (undefined !== (item = this.queue.shift())) {\n this.stashed.push(item);\n }\n }\n\n unstash() {\n Logger.log(Logger.TYPE_QUEUE, 'Queue::unstash');\n\n let item;\n\n // eslint-disable-next-line\n while (undefined !== (item = this.stashed.shift())) {\n this.queue.push(item);\n }\n }\n}\n","import * as Logger from './logger';\n\n// Returns current local timestamp\nconst local = () => new Date() / 1000;\n\n// Server time default to local time\nlet serverTime = local();\n\n// Time when the server time was received on the client\nlet clientTimeAtSync = local();\n\nexport const setTime = (newTime) => {\n Logger.log(Logger.TYPE_TIME, 'Time::setTime', newTime);\n\n serverTime = newTime;\n // offset = local() - time;\n clientTimeAtSync = local();\n};\n\nexport const now = () => {\n const elapsedTime = local() - clientTimeAtSync;\n\n return Math.round(serverTime + elapsedTime);\n};\n","import { Emitter } from '@monterosa/sdk-util';\n\nexport default class Transport extends Emitter {\n // generic events\n static ON_READY = 'ready';\n static ON_MESSAGE = 'message';\n\n // connection state events\n static ON_CONNECTED = 'connected';\n static ON_CONNECT_FAILED = 'connect_failed';\n static ON_CONNECT_LOST = 'connect_lost';\n static ON_DISCONNECTED = 'disconnected';\n\n // states\n static STATE_CONNECTED = 'connected';\n static STATE_CONNECTING = 'connecting';\n static STATE_DISCONNECTED = 'disconnected';\n static STATE_DISCONNECTING = 'disconnecting';\n\n constructor() {\n super();\n\n this.state = this.STATE_DISCONNECTED;\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n}\n","/* eslint class-methods-use-this: \"off\" */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nexport default class Driver extends Emitter {\n static ON_READY = 'ready';\n static ON_MESSAGE = 'message';\n static ON_CONNECTED = 'connected';\n static ON_DISCONNECTED = 'disconnected';\n\n constructor() {\n super();\n\n this.connected = false;\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n\n connect() {}\n\n disconnect() {}\n\n // Arguments:\n //\n // data = null\n // success = () => {}\n // failure = () => {}\n send() {}\n\n init() {\n this.trigger(Driver.ON_READY);\n }\n}\n","import { getGlobal } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\nimport Driver from './base';\n\nconst globals = getGlobal();\n\nexport default class XHRDriver extends Driver {\n constructor(config = {}) {\n super();\n\n this.config = config;\n this.requests = {};\n this.requestIdx = 0;\n }\n\n // CORS request wrapper\n _request(url, success = () => {}, failure = () => {}, abort = () => {}) {\n this.requestIdx += 1;\n\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request url=${url}, idx=${this.requestIdx}`,\n );\n\n const self = this;\n let xhr = new XMLHttpRequest();\n const method = 'POST';\n\n if (typeof XDomainRequest !== 'undefined') {\n xhr = new XDomainRequest();\n xhr.open(method, url);\n } else if ('withCredentials' in xhr) {\n xhr.open(method, url, true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n } else {\n return null;\n }\n\n xhr._idx = this.requestIdx;\n\n xhr.onload = function onLoad() {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onload idx=${xhr._idx}, response=${this.responseText}`,\n );\n\n if (this.responseText.length > 0) {\n success(self._parseResponse(this.responseText));\n } else {\n failure(this.responseText);\n }\n };\n\n xhr.onerror = function onError() {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onerror idx=${xhr._idx}, response=${this.responseText}`,\n );\n\n failure(this.responseText);\n };\n\n // XHR doesn't trigger onabort event in IE < 10\n // attaching custom abort handler and execute\n // it manually on each abort() call\n xhr._onabort = () => {\n Logger.log(\n Logger.TYPE_DRIVER_EXTRA,\n `XHRDriver::request::onabort idx=${xhr._idx}`,\n );\n\n abort();\n };\n\n return xhr;\n }\n\n _parseResponse(response) {\n const data = {};\n const chunks = response.split('&');\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n const [key, value] = chunks[i].split('=');\n\n const normalisedValue = decodeURIComponent(value.replace('\\0', ''));\n\n if (key in data) {\n if (data[key].constructor !== Array) {\n data[key] = [data[key]];\n }\n data[key].push(normalisedValue);\n } else {\n data[key] = normalisedValue;\n }\n }\n\n return data;\n }\n\n _removeRequest(idx) {\n Logger.log(Logger.TYPE_DRIVER_EXTRA, 'XHRDriver::removeRequest', idx);\n\n if (Object.prototype.hasOwnProperty.call(this.requests, idx)) {\n delete this.requests[idx];\n }\n }\n\n connect() {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::connect');\n\n if (this.connected) {\n Logger.log(\n Logger.TYPE_DRIVER,\n 'XHRDriver::connect already been connected!',\n );\n\n return;\n }\n\n this.connected = true;\n\n this.trigger(XHRDriver.ON_CONNECTED);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::disconnect');\n\n if (this.connected) {\n // abort all requests\n for (const idx in this.requests) {\n if (\n Object.prototype.hasOwnProperty.call(this.requests, idx) &&\n this.requests[idx].abort\n ) {\n this.requests[idx].abort();\n\n if (this.requests[idx]._onabort) {\n this.requests[idx]._onabort();\n }\n\n this._removeRequest(idx);\n }\n }\n\n this.connected = false;\n }\n\n this.trigger(XHRDriver.ON_DISCONNECTED);\n }\n\n send(url, data, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::send', data);\n\n let xhr;\n let retry = 1;\n\n const send = () => {\n // eslint-disable-next-line\n xhr = this._request(url, onSuccess, onFailure, onAbort);\n\n this.requests[xhr._idx] = xhr;\n\n // fixes aborting requests in IE\n setTimeout(() => {\n xhr.send(data);\n }, 0);\n };\n\n const onSuccess = (response) => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::success', data);\n this._removeRequest(xhr._idx);\n success(response);\n };\n\n const onFailure = (response) => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::failure, retry: ', retry);\n this._removeRequest(xhr._idx);\n if (retry <= this.config.request_retries) {\n setTimeout(() => {\n send();\n retry++;\n }, this.config.request_retry_delay * 1000);\n } else {\n failure(response);\n }\n };\n\n const onAbort = () => {\n Logger.log(Logger.TYPE_DRIVER, 'XHRDriver::abort', data);\n this._removeRequest(xhr._idx);\n failure();\n };\n\n send();\n }\n\n static hasSupport() {\n return (\n 'XDomainRequest' in globals || 'withCredentials' in new XMLHttpRequest()\n );\n }\n}\n","/* eslint class-methods-use-this: \"off\" */\n\nimport { getGlobal } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\nimport Driver from './base';\n\nconst globals = getGlobal();\n\nexport default class WebSocketDriver extends Driver {\n constructor() {\n super();\n\n this.websocket = null;\n this.closeTimeout = null;\n }\n\n _onMessage(e) {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onMessage', e.data);\n this.trigger(WebSocketDriver.ON_MESSAGE, e.data);\n }\n\n _onOpen() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onOpen');\n this.connected = true;\n this.trigger(WebSocketDriver.ON_CONNECTED);\n }\n\n _onClose() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onClose');\n this._disconnect();\n }\n\n _onError() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::onError');\n }\n\n _disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::disconnect');\n\n this.connected = false;\n\n // reset handlers if websocket was created\n if (this.websocket !== null) {\n this.websocket.onmessage = () => {};\n this.websocket.onopen = () => {};\n this.websocket.onclose = () => {};\n this.websocket.onerror = () => {};\n this.websocket = null;\n }\n\n clearTimeout(this.closeTimeout);\n\n this.trigger(WebSocketDriver.ON_DISCONNECTED);\n }\n\n connect(host, port, secure) {\n if (this.connected) {\n return;\n }\n\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::connect', host, port);\n\n const url = `${secure ? 'wss' : 'ws'}://${host}:${port}/ws`;\n\n this.websocket = new WebSocket(url);\n this.websocket.onmessage = this._onMessage.bind(this);\n this.websocket.onopen = this._onOpen.bind(this);\n this.websocket.onclose = this._onClose.bind(this);\n this.websocket.onerror = this._onError.bind(this);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::disconnect');\n\n if (this.connected) {\n // ON_DISCONNECTED will be triggered at onClose event\n this.websocket.close();\n\n // websocket does not fire onclose if network connection is lost\n // set timeout to force fire ON_DISCONNECTED event\n this.closeTimeout = setTimeout(this._disconnect.bind(this), 750);\n } else {\n // disconnect instantly if websocket wasn't connected or still connecting\n this._disconnect();\n }\n }\n\n send(data, success = () => {}) {\n Logger.log(Logger.TYPE_DRIVER, 'WebSocketDriver::send', data);\n this.websocket.send(data);\n success();\n }\n\n static hasSupport() {\n return 'WebSocket' in globals;\n }\n}\n","import * as Logger from '../utils/logger';\n\nimport Transport from './base';\nimport Driver from '../drivers/base';\n\nconst COMMAND_CONNECT = 'connect';\nconst COMMAND_PASS = 'pass';\nconst COMMAND_POLL = 'poll';\n\nexport default class ProxyTransport extends Transport {\n constructor(config = {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::constructor', config);\n\n super(config);\n\n this.driver = config.driver || null;\n this.host = config.host || null;\n this.port = config.port || null;\n this.secure = config.secure || false;\n\n /*\n * Proxy properties\n * host and port should be always preserved on connect and reconnect\n * drop proxyIp, childId and clientId on reconnect and disconnect\n */\n\n this.proxyIp = null;\n this.childId = null;\n this.clientId = null;\n this.sessionId = null;\n\n this.driver.bind(Driver.ON_READY, this._handleDriverReady.bind(this));\n this.driver.bind(\n Driver.ON_CONNECTED,\n this._handleDriverConnected.bind(this),\n );\n this.driver.bind(\n Driver.ON_DISCONNECTED,\n this._handleDriverDisconnected.bind(this),\n );\n }\n\n _url() {\n return (\n `${this.secure ? 'https' : 'http'}://` +\n `${this.proxyIp ? this.proxyIp : this.host}:` +\n `${this.port}/` +\n `${this.childId !== null ? `${this.childId}/` : ''}` +\n `?_r=${new Date().getTime()}`\n );\n }\n\n _request(params = '', success = () => {}, failure = () => {}) {\n const self = this;\n\n const onSuccess = (response) => {\n // fire ON_MESSAGE event unless sscp message is empty\n if (response.sscp.constructor === String) {\n response.sscp = [response.sscp];\n }\n\n for (let i = 0, l = response.sscp.length; i < l; i++) {\n if (response.sscp[i] !== '') {\n self.trigger(ProxyTransport.ON_MESSAGE, response.sscp[i]);\n }\n }\n\n success(response);\n };\n\n const onFailure = () => {\n switch (self.state) {\n case ProxyTransport.STATE_CONNECTED:\n self.state = ProxyTransport.STATE_DISCONNECTING;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_CONNECTING:\n self.state = ProxyTransport.STATE_DISCONNECTING;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_DISCONNECTING:\n self.state = ProxyTransport.STATE_DISCONNECTED;\n self.trigger(ProxyTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n\n failure();\n };\n\n this.driver.send(this._url(), params, onSuccess, onFailure);\n }\n\n _poll() {\n const params =\n `command=${COMMAND_POLL}` +\n `&clientid=${this.clientId}` +\n `&sid=${this.sessionId}`;\n\n this._request(params, this._poll.bind(this));\n }\n\n _connect() {\n const self = this;\n\n const onSuccess = (response) => {\n self.proxyIp = response.proxy;\n self.clientId = parseInt(response.clientid, 10);\n self.childId = parseInt(response.childid, 10);\n self.sessionId = response.sid;\n\n self.state = ProxyTransport.STATE_CONNECTED;\n\n self.trigger(ProxyTransport.ON_CONNECTED);\n\n self._poll();\n };\n\n const onFailure = () => {\n self.state = ProxyTransport.STATE_DISCONNECTED;\n self.trigger(ProxyTransport.ON_CONNECT_FAILED);\n };\n\n const params = `command=${COMMAND_CONNECT}`;\n\n this._request(params, onSuccess, onFailure);\n }\n\n _handleDriverReady() {\n this.trigger(ProxyTransport.ON_READY);\n }\n\n _handleDriverConnected() {\n this._connect();\n }\n\n _handleDriverDisconnected() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'ProxyTransport::handleDriverDisconnected',\n );\n\n const { state } = this;\n\n this.state = ProxyTransport.STATE_DISCONNECTED;\n\n switch (state) {\n case ProxyTransport.STATE_CONNECTED:\n this.trigger(ProxyTransport.ON_CONNECT_LOST);\n break;\n case ProxyTransport.STATE_CONNECTING:\n this.trigger(ProxyTransport.ON_CONNECT_FAILED);\n break;\n case ProxyTransport.STATE_DISCONNECTING:\n this.trigger(ProxyTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n }\n\n send(sscp, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::send', sscp);\n\n const params =\n `command=${COMMAND_PASS}` +\n `&clientid=${this.clientId}` +\n `&sscp=${sscp}` +\n `&sid=${this.sessionId}`;\n\n this._request(params, success, failure);\n }\n\n connect() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'ProxyTransport::connect',\n this.host,\n this.port,\n );\n\n this.state = ProxyTransport.STATE_CONNECTING;\n this.driver.connect();\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::disconnect');\n\n // drop proxy settings\n this.proxyIp = null;\n this.childId = null;\n this.sessionId = null;\n this.state = ProxyTransport.STATE_DISCONNECTING;\n\n this.driver.disconnect();\n }\n\n init() {\n Logger.log(Logger.TYPE_TRANSPORT, 'ProxyTransport::init');\n\n this.driver.init();\n }\n}\n","import * as Logger from '../utils/logger';\n\nimport Transport from './base';\nimport Driver from '../drivers/base';\n\nexport default class SocketTransport extends Transport {\n constructor(config = {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::constructor', config);\n\n super();\n\n this.driver = config.driver || null;\n this.host = config.host || null;\n this.port = config.port || null;\n this.secure = config.secure || false;\n\n this.driver.bind(Driver.ON_READY, this._handleDriverReady.bind(this));\n this.driver.bind(Driver.ON_MESSAGE, this._handleDriverMessage.bind(this));\n this.driver.bind(\n Driver.ON_CONNECTED,\n this._handleDriverConnected.bind(this),\n );\n this.driver.bind(\n Driver.ON_DISCONNECTED,\n this._handleDriverDisconnected.bind(this),\n );\n }\n\n _handleDriverReady() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::_handleDriverReady');\n\n this.trigger(SocketTransport.ON_READY);\n }\n\n _handleDriverMessage(message) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::handleDriverMessage');\n\n this.trigger(SocketTransport.ON_MESSAGE, message);\n }\n\n _handleDriverConnected() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::handleDriverConnected');\n\n this.state = SocketTransport.STATE_CONNECTED;\n this.trigger(SocketTransport.ON_CONNECTED);\n }\n\n _handleDriverDisconnected() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'SocketTransport::handleDriverDisconnected',\n );\n\n const { state } = this;\n\n this.state = SocketTransport.STATE_DISCONNECTED;\n\n switch (state) {\n case SocketTransport.STATE_CONNECTED:\n this.trigger(SocketTransport.ON_CONNECT_LOST);\n break;\n case SocketTransport.STATE_CONNECTING:\n this.trigger(SocketTransport.ON_CONNECT_FAILED);\n break;\n case SocketTransport.STATE_DISCONNECTING:\n this.trigger(SocketTransport.ON_DISCONNECTED);\n break;\n default:\n break;\n }\n }\n\n send(sscp, success = () => {}, failure = () => {}) {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::send', sscp);\n this.driver.send(sscp, success, failure);\n }\n\n connect() {\n Logger.log(\n Logger.TYPE_TRANSPORT,\n 'SocketTransport::connect',\n this.host,\n this.port,\n );\n this.state = SocketTransport.STATE_CONNECTING;\n this.driver.connect(this.host, this.port, this.secure);\n }\n\n disconnect() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::disconnect');\n this.state = SocketTransport.STATE_DISCONNECTING;\n this.driver.disconnect();\n }\n\n init() {\n Logger.log(Logger.TYPE_TRANSPORT, 'SocketTransport::init');\n this.driver.init();\n }\n}\n","import { Emitter } from '@monterosa/sdk-util';\n\nimport { ENMASSE_OVERRIDE_METHODS } from './settings';\nimport * as Logger from './utils/logger';\nimport XHRDriver from './drivers/xhr';\nimport WebSocketDriver from './drivers/websocket';\nimport Transport from './transports/base';\nimport ProxyTransport from './transports/proxy';\nimport SocketTransport from './transports/socket';\n\nconst METHOD_PROXY = 'proxy';\nconst METHOD_WEBSOCKET = 'websocket';\n\nclass TransportManager extends Emitter {\n constructor() {\n super();\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n\n this.ON_READY = 'ready';\n this.config = null;\n this.idx = 0;\n\n // list of connection types pairs: transport - driver\n this.methods = {};\n this.transports = {};\n this.loaded = 0;\n this.sequence = [];\n this.allowed = [];\n this.secure = true;\n\n // Guarding the use of the window object in environments where it might\n // not be available, such as during server - side rendering in a framework\n // like Next.js\n if (typeof window !== 'undefined') {\n this.secure = window.location.protocol.indexOf('https') === 0;\n }\n\n // list of connection methods which where unsuccessful\n this.unsuccessful = [];\n }\n\n _instantiate() {\n Logger.log(Logger.TYPE_MANAGER, 'TransportManager::instantiate');\n\n // instantiate all transports\n this.allowed.forEach((method) => {\n const config = this._getMethodConfig(method);\n\n // pick the random host\n const host =\n config.hosts[Math.floor(Math.random() * config.hosts.length)];\n\n const TransportKlass = this.methods[method].transport;\n const DriverKlass = this.methods[method].driver;\n\n const transport = new TransportKlass({\n driver: new DriverKlass(config.driver || {}),\n host,\n port: this.secure ? config.secure_port : config.port,\n secure: this.secure,\n });\n\n this.transports[method] = transport;\n\n transport.bind(Transport.ON_READY, this._handleTransportReady.bind(this));\n }, this);\n\n // initialise all transports\n for (const method in this.transports) {\n if (Object.prototype.hasOwnProperty.call(this.transports, method)) {\n this.transports[method].init();\n }\n }\n }\n\n _getMethodConfig(method) {\n return this.config.methods.find((item) => item.type === method);\n }\n\n _handleTransportReady() {\n this.loaded += 1;\n\n if (this.loaded === this.allowed.length) {\n this.trigger(this.ON_READY);\n }\n }\n\n current() {\n return this.transports[this.allowed[this.idx]];\n }\n\n next() {\n this.idx += 1;\n\n if (this.idx >= this.allowed.length) {\n return false;\n }\n\n return this.current();\n }\n\n reset() {\n this.allowed = [];\n this.unsuccessful = [];\n\n // gather all methods in one array in correct connection sequence\n for (let i = 0, l = this.sequence.length; i < l; i += 1) {\n // shift method's idx by the value of the current method idx\n const method = this.sequence[(i + this.idx) % l];\n\n if (this.methods[method].driver.hasSupport()) {\n this.allowed.push(method);\n }\n }\n\n this.idx = 0;\n }\n\n addUnsuccessful(transport) {\n for (const method in this.transports) {\n if (\n Object.prototype.hasOwnProperty.call(this.transports, method) &&\n this.transports[method] === transport\n ) {\n this.unsuccessful.push(method);\n }\n }\n }\n\n init(config = {}) {\n this.config = config;\n this.idx = 0;\n this.loaded = 0;\n this.sequence = [];\n this.secure = config.forceSecure === true ? true : this.secure;\n\n this.methods[METHOD_PROXY] = {\n driver: XHRDriver,\n transport: ProxyTransport,\n };\n this.methods[METHOD_WEBSOCKET] = {\n driver: WebSocketDriver,\n transport: SocketTransport,\n };\n\n if (ENMASSE_OVERRIDE_METHODS) {\n this.sequence = ENMASSE_OVERRIDE_METHODS;\n } else {\n this.config.methods.forEach(\n (method) => this.sequence.push(method.type),\n this,\n );\n }\n\n // remove unsupported methods\n /* eslint-disable */\n this.sequence = this.sequence.filter((item) =>\n Object.prototype.hasOwnProperty.call(this.methods, item),\n );\n /* eslint-enable */\n\n this.reset();\n\n this._instantiate();\n }\n}\n\nexport default new TransportManager();\n","/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"variables\": false }] */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport * as Logger from './utils/logger';\nimport * as Time from './utils/time';\nimport Transport from './transports/base';\nimport TransportManager from './transport_manager';\n\nconst ConnectionManager = (() => {\n const self = new Emitter();\n\n self.trigger = self.emit;\n self.bind = self.on;\n self.unbind = self.off;\n\n /*\n * Constants\n */\n const CONNECT_DELAYS = [0, 3, 5, 10, 20, 30, 45, 60];\n\n /*\n * States\n */\n self.STATE_DISCONNECTED = 'state_disconnected';\n self.STATE_DISCONNECTING = 'state_disconnecting';\n self.STATE_CONNECTING = 'state_connecting';\n self.STATE_CONNECTED = 'state_connected';\n\n /*\n * Events\n */\n self.ON_MESSAGE = 'message';\n self.ON_STATE = 'state';\n\n /*\n * Private variables\n */\n let config = null;\n let state = self.STATE_DISCONNECTED;\n let transport = null;\n let attempt = 1;\n\n // Timestamp to track when the app was backgrounded\n let backgroundedAt = null;\n\n const inactivityTimeout = {\n start() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::start',\n );\n\n const stamp = Time.now();\n\n this.interval = setInterval(() => {\n if (Time.now() - stamp >= config.inactivity_timeout) {\n this.resolve();\n }\n }, 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::stop',\n );\n\n clearInterval(this.interval);\n },\n\n reset() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::reset',\n );\n\n this.stop();\n this.start();\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::inactivityTimeout::resolve',\n );\n\n disconnectingOnConnectLost();\n },\n };\n\n const connectTimeout = {\n start() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::start',\n );\n\n this.timeout = setTimeout(() => {\n this.resolve();\n }, config.connect_timeout * 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::stop',\n );\n\n clearTimeout(this.timeout);\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectTimeout::resolve',\n );\n\n disconnectingOnConnectFailed();\n },\n };\n\n const connectDelay = {\n active: false,\n\n start(delay) {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::start',\n );\n\n this.active = true;\n this.timeout = setTimeout(() => {\n this.resolve();\n }, delay * 1000);\n },\n\n stop() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::stop',\n );\n\n this.active = false;\n clearTimeout(this.timeout);\n },\n\n resolve() {\n Logger.log(\n Logger.TYPE_MANAGER_EXTRA,\n 'ConnectionManager::connectDelay::resolve',\n );\n\n this.stop();\n connect();\n },\n };\n\n const initTransport = (newTransport) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::initTransport');\n\n transport = newTransport;\n\n transport.bind(Transport.ON_MESSAGE, handleTransportMessage);\n transport.bind(Transport.ON_CONNECTED, handleTransportConnected);\n transport.bind(Transport.ON_CONNECT_FAILED, handleTransportConnectFailed);\n transport.bind(Transport.ON_CONNECT_LOST, handleTransportConnectLost);\n transport.bind(Transport.ON_DISCONNECTED, handleTransportDisconnected);\n };\n\n const teardownTransport = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::teardownTransport');\n\n if (transport === null) {\n return;\n }\n\n transport.unbind(Transport.ON_MESSAGE, handleTransportMessage);\n transport.unbind(Transport.ON_CONNECTED, handleTransportConnected);\n transport.unbind(Transport.ON_CONNECT_FAILED, handleTransportConnectFailed);\n transport.unbind(Transport.ON_CONNECT_LOST, handleTransportConnectLost);\n transport.unbind(Transport.ON_DISCONNECTED, handleTransportDisconnected);\n\n transport = null;\n };\n\n const handleTransportMessage = (message) => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportMessage',\n message,\n );\n\n const messages = message.split('\\0');\n\n for (let i = 0; i < messages.length; i += 1) {\n if (messages[i].length > 0) {\n inactivityTimeout.reset();\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportMessage',\n 'send upstream m:',\n messages[i],\n );\n self.trigger(self.ON_MESSAGE, messages[i]);\n }\n }\n };\n\n const handleTransportConnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnected',\n );\n setStateToConnected();\n };\n\n const handleTransportConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnectFailed',\n );\n disconnectingOnConnectFailed();\n };\n\n const handleTransportConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportConnectLost',\n );\n disconnectingOnConnectLost();\n };\n\n const handleTransportDisconnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleTransportDisconnected',\n );\n\n switch (state) {\n case self.STATE_CONNECTED:\n disconnectedOnConnectLost();\n break;\n case self.STATE_CONNECTING:\n disconnectedOnConnectFailed();\n break;\n case self.STATE_DISCONNECTING:\n setStateToDisconnected();\n break;\n default:\n break;\n }\n };\n\n const disconnectingOnConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectingOnConnectFailed()',\n );\n\n disconnect();\n };\n\n const disconnectingOnConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectingOnConnectLost()',\n );\n\n disconnect();\n };\n\n const disconnectedOnConnectLost = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectedOnConnectLost()',\n );\n\n teardownTransport();\n\n // automatically reconnect\n setStateToConnecting();\n };\n\n const disconnectedOnConnectFailed = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::disconnectedOnConnectFailed()',\n );\n\n TransportManager.addUnsuccessful(transport);\n\n teardownTransport();\n\n if (TransportManager.next() === false) {\n setStateToConnecting();\n } else {\n connect();\n }\n };\n\n const setStateToConnecting = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToConnecting()',\n );\n\n let delay;\n\n if (attempt >= CONNECT_DELAYS.length) {\n delay = CONNECT_DELAYS[CONNECT_DELAYS.length - 1];\n } else {\n delay = CONNECT_DELAYS[attempt - 1];\n }\n\n state = self.STATE_CONNECTING;\n self.trigger(self.ON_STATE, state, attempt, delay);\n\n TransportManager.reset();\n\n attempt += 1;\n connectDelay.start(delay);\n };\n\n const setStateToConnected = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::setStateToConnected()');\n\n attempt = 1;\n TransportManager.reset();\n inactivityTimeout.reset();\n connectTimeout.stop();\n connectDelay.stop();\n\n state = self.STATE_CONNECTED;\n self.trigger(self.ON_STATE, state);\n };\n\n const setStateToDisconnecting = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToDisconnecting()',\n );\n\n state = self.STATE_DISCONNECTING;\n self.trigger(self.ON_STATE, state);\n\n disconnect();\n };\n\n const setStateToDisconnected = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::setStateToDisconnected()',\n );\n\n attempt = 1;\n teardownTransport();\n TransportManager.reset();\n\n state = self.STATE_DISCONNECTED;\n self.trigger(self.ON_STATE, state);\n };\n\n const connect = () => {\n if (state === self.STATE_CONNECTING) {\n connectTimeout.start();\n initTransport(TransportManager.current());\n transport.connect();\n }\n };\n\n const disconnect = () => {\n inactivityTimeout.stop();\n connectTimeout.stop();\n connectDelay.stop();\n\n if (transport) {\n transport.disconnect();\n } else {\n setStateToDisconnected();\n }\n };\n\n /**\n * Handles changes in the document's visibility state (visible/hidden).\n *\n * - Tracks when the document is backgrounded by recording the timestamp.\n * - When the document becomes visible again, checks if the time spent in the background\n * exceeds a configured timeout. If it does, the connection is disconnected.\n * - Ensures actions are only taken if necessary, based on the current connection state\n * and whether the page was previously backgrounded.\n *\n * Note on Safari (ios and desktop) and Firefox quirk: visibilitychange event is fired\n * immidiately when the page is loaded, even if the page is visible.\n */\n const handleVisibilityChange = () => {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleVisibilityChange()',\n document.visibilityState,\n );\n\n switch (document.visibilityState) {\n case 'visible':\n if (backgroundedAt === null) {\n return;\n }\n\n if (state !== self.STATE_CONNECTED) {\n return;\n }\n\n if (Date.now() - backgroundedAt > config.background_timeout * 1000) {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleVisibilityChange()',\n 'disconnecting due to background timeout',\n );\n\n disconnect();\n }\n\n backgroundedAt = null;\n break;\n case 'hidden':\n backgroundedAt = Date.now();\n break;\n }\n };\n\n const handleNetworkStatus = () => {\n if (!navigator.onLine && state === self.STATE_CONNECTED) {\n Logger.log(\n Logger.TYPE_MANAGER,\n 'ConnectionManager::handleNetworkStatus()',\n 'disconnecting due to network loss',\n );\n disconnect();\n }\n };\n\n self.connect = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::connect()');\n\n // resolve connect instantly if the process has been already postponed\n if (connectDelay.active) {\n connectDelay.resolve();\n } else if (state === self.STATE_DISCONNECTED) {\n setStateToConnecting();\n }\n\n window.addEventListener('online', handleNetworkStatus);\n window.addEventListener('offline', handleNetworkStatus);\n window.addEventListener('visibilitychange', handleVisibilityChange);\n };\n\n self.disconnect = () => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::disconnect()');\n\n setStateToDisconnecting();\n\n window.removeEventListener('online', handleNetworkStatus);\n window.removeEventListener('offline', handleNetworkStatus);\n window.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n\n self.send = (sscp, success, failure) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::send', sscp);\n success = success || (() => {});\n failure = failure || (() => {});\n transport.send(sscp, success, failure);\n };\n\n self.getConnectAttempt = () => attempt;\n\n self.init = (cfg) => {\n Logger.log(Logger.TYPE_MANAGER, 'ConnectionManager::init()', cfg);\n config = cfg;\n };\n\n return self;\n})();\n\nexport default ConnectionManager;\n","/* eslint-disable no-console */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport * as Logger from '../utils/logger';\n\nclass Demographics extends Emitter {\n constructor(...args) {\n super(...args);\n\n this.ON_ADD_COUNTER = 'add-counter';\n\n this.trigger = this.emit;\n this.bind = this.on;\n this.unbind = this.off;\n }\n\n addCounter(\n channel,\n eventId,\n segment,\n counter,\n round = null,\n min = null,\n max = null,\n ) {\n Logger.log(\n Logger.TYPE_SERVICE,\n 'Demographics::addCounter',\n channel,\n eventId,\n segment,\n counter,\n round,\n min,\n max,\n );\n\n if (!channel) {\n return;\n }\n\n if (!eventId) {\n return;\n }\n\n if (\n !segment ||\n segment.constructor !== Array ||\n !segment.length ||\n segment.length % 2 !== 0\n ) {\n return;\n }\n\n if (counter !== parseInt(counter, 10)) {\n return;\n }\n\n const keys = segment.filter((v, i) => (i + 1) % 2).join(':');\n const values = segment.filter((v, i) => i % 2).join(':');\n\n this.trigger(this.ON_ADD_COUNTER, channel, [\n eventId,\n min,\n max,\n round,\n keys,\n values,\n counter,\n ]);\n }\n}\n\nexport default new Demographics();\n","/* eslint-disable no-console */\n\nimport { Emitter, getItem, getErrorMessage } from '@monterosa/sdk-util';\nimport {\n storageRead,\n storageWrite,\n storageRemove,\n} from '@monterosa/sdk-storage-kit';\nimport { getParentApplication } from '@monterosa/sdk-launcher-kit';\n\nimport {\n ENMASSE_CONFIG,\n SSCP_KLASS_AUTH,\n SSCP_KLASS_AUTHR,\n SSCP_KLASS_AUTHOK,\n SSCP_KLASS_PING,\n SSCP_KLASS_EOC,\n SSCP_KLASS_SUB,\n SSCP_KLASS_UNSUB,\n SSCP_KLASS_LOGIN,\n SSCP_KLASS_LOGIN_OK,\n SSCP_KLASS_LOGIN_FAIL,\n SSCP_KLASS_COUNTER,\n} from './settings';\nimport { version } from '../package.json';\nimport * as Logger from './utils/logger';\nimport Queue from './utils/queue';\nimport * as Time from './utils/time';\nimport ConnectionManager from './connection_manager';\nimport TransportManager from './transport_manager';\nimport Demographics from './services/demographics';\n\nconst Enmasse = (() => {\n /*\n * Link to the scope\n */\n\n const self = new Emitter();\n\n self.trigger = self.emit;\n self.bind = self.on;\n self.unbind = self.off;\n\n /*\n * Constants\n */\n\n self.VERSION = version;\n self.PROTOCOL_VERSION = '8';\n\n self.SSCP_KLASS_AUTH = SSCP_KLASS_AUTH;\n self.SSCP_KLASS_AUTHR = SSCP_KLASS_AUTHR;\n self.SSCP_KLASS_AUTHOK = SSCP_KLASS_AUTHOK;\n self.SSCP_KLASS_PING = SSCP_KLASS_PING;\n self.SSCP_KLASS_SUB = SSCP_KLASS_SUB;\n self.SSCP_KLASS_UNSUB = SSCP_KLASS_UNSUB;\n self.SSCP_KLASS_EOC = SSCP_KLASS_EOC;\n self.SSCP_KLASS_LOGIN = SSCP_KLASS_LOGIN;\n self.SSCP_KLASS_COUNTER = SSCP_KLASS_COUNTER;\n\n self.ON_STATE = 'on_state';\n self.ON_MESSAGE = 'on_message';\n self.ON_EOC = 'on_eoc';\n self.ON_READY = 'on_ready';\n self.ON_ERROR = 'on_error';\n\n self.STATE_DISCONNECTED = 'disconnected';\n self.STATE_CONNECTED = 'connected';\n self.STATE_CONNECTING = 'connecting';\n\n self.Demographics = Demographics;\n\n // var CALLBACK_NAME = \"__enmasse_callback\";\n // var CONFIG_TIMEOUT = 5000;\n\n const PARAM_SESSION_ID = 'enmasse_session_id';\n\n /*\n * Enmasse properties\n */\n\n // Link to the config file.\n let configFile = null;\n\n // list of arbitray data passed into handshake\n // message along with the protocol version\n let info = [];\n\n // session id is generated by server and passed\n // on client on handshake\n let sessionId = null;\n\n // out messages queue\n let queue = null;\n\n // current state of the state machine\n let state = self.STATE_DISCONNECTED;\n\n // system channel\n let sysChannel = null;\n\n // force secure connection\n let forceSecure = false;\n\n // sign in promise object\n let loginContext = {\n inProgress: false,\n success: () => {},\n failure: () => {},\n };\n\n /*\n * Private methods\n */\n\n const storeSession = async (id) => {\n try {\n await storageWrite(PARAM_SESSION_ID, id);\n } catch (err) {\n console.error(\n `Failed to persist session to shared storage: ${getErrorMessage(err)}`,\n );\n }\n };\n\n const restoreSession = async () => {\n let restoredId = null;\n\n // Read session from shared storage\n try {\n restoredId = await storageRead(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to read session from shared storage: ${getErrorMessage(err)}`,\n );\n }\n\n if (restoredId !== null) {\n return restoredId;\n }\n\n /**\n * Further down is a special case when we try to restore session id from the\n * local storage and save it to the shared storage. This could happen in\n * previous versions of the SDK when we didn't have a shared storage.\n */\n\n if (getParentApplication() === null) {\n return null;\n }\n\n try {\n restoredId = getItem(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to read local session during migration: ${getErrorMessage(\n err,\n )}`,\n );\n }\n\n if (restoredId === null) {\n return null;\n }\n\n try {\n await storageWrite(PARAM_SESSION_ID, restoredId);\n } catch (err) {\n console.error(\n `Failed to persist session to shared storage during migration: ${getErrorMessage(\n err,\n )}`,\n );\n }\n\n return restoredId;\n };\n\n const resetSession = async () => {\n sessionId = null;\n\n try {\n await storageRemove(PARAM_SESSION_ID);\n } catch (err) {\n console.error(\n `Failed to remove session from shared storage: ${getErrorMessage(err)}`,\n );\n }\n };\n\n const validateSession = (id) =>\n // eslint-disable-next-line\n /^[a-f\\d]{8}\\-[a-f\\d]{4}\\-[a-f\\d]{4}-[a-f\\d]{4}\\-[a-f\\d]{12}$/i.test(id);\n\n const finaliseLogin = (callback) => {\n if (loginContext.inProgress === false) {\n return;\n }\n\n loginContext = {\n inProgress: false,\n success: () => {},\n failure: () => {},\n };\n\n callback();\n };\n\n const resolveLogin = () => {\n finaliseLogin(loginContext.success);\n };\n\n const rejectLogin = () => {\n finaliseLogin(loginContext.failure);\n };\n\n const setStateToDisconnected = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToDisconnected()');\n\n state = self.STATE_DISCONNECTED;\n sysChannel = null;\n\n rejectLogin();\n\n self.trigger(self.ON_STATE, state);\n };\n\n const setStateToConnected = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToConnected()');\n\n const time = Time.now();\n state = self.STATE_CONNECTED;\n self.trigger(self.ON_STATE, state, time);\n };\n\n const setStateToConnecting = (attempt, delay) => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::setStateToConnecting()');\n\n state = self.STATE_CONNECTING;\n rejectLogin();\n\n self.trigger(self.ON_STATE, state, attempt, delay);\n };\n\n const parseSSCP = (sscp) => {\n const data = {\n channel: 0,\n klass: '',\n sent_at: 0,\n body: [],\n };\n\n const separator1 = sscp.indexOf('/');\n\n if (separator1 !== -1) {\n const separator2 = sscp.indexOf('/', separator1 + 1);\n\n if (separator2 !== -1) {\n data.channel = sscp.substr(0, separator1);\n data.klass = sscp.substr(separator1 + 1, separator2 - separator1 - 1);\n\n const separator3 = sscp.indexOf('/', separator2 + 1);\n\n if (separator3 !== -1) {\n data.sent_at = parseInt(\n sscp.substr(separator2 + 1, separator3 - separator2 - 1),\n 10,\n );\n\n const body = sscp.substr(separator3 + 1);\n\n if (body !== '') {\n const values = body.split('|');\n\n for (let i = 0, l = values.length; i < l; i += 1) {\n data.body[i] = decodeURIComponent(values[i]);\n }\n }\n }\n }\n }\n\n return data;\n };\n\n const stringifySSCP = (message) =>\n [\n message.channel,\n message.klass,\n Math.floor(new Date() / 1000),\n message.body.join('|'),\n ].join('/');\n\n const runner = (message) => {\n const success = () => {\n queue.success();\n };\n\n const failure = () => {\n queue.failure();\n };\n\n ConnectionManager.send(stringifySSCP(message), success, failure);\n };\n\n const handleTransportManagerReady = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::handleTransportManagerReady');\n self.trigger(self.ON_READY);\n };\n\n const handleConnectionManagerState = (...args) => {\n Logger.log(\n Logger.TYPE_PROTOCOL,\n 'Enmasse::handleConnectionManagerState',\n args,\n );\n\n switch (args[0]) {\n // case ConnectionManager.STATE_DISCONNECTING:\n // break;\n case ConnectionManager.STATE_DISCONNECTED:\n setStateToDisconnected();\n break;\n case ConnectionManager.STATE_CONNECTING:\n setStateToConnecting(args[1], args[2]);\n break;\n case ConnectionManager.STATE_CONNECTED:\n break;\n default:\n break;\n }\n };\n\n const handleConnectionManagerMessage = async (message) => {\n Logger.log(\n Logger.TYPE_PROTOCOL,\n 'Enmasse::handleConnectionManagerMessage',\n message,\n );\n\n const data = parseSSCP(message);\n\n switch (data.klass) {\n case SSCP_KLASS_AUTH: {\n const time = data.sent_at;\n\n const clientInfo = [\n `enmassejs-${self.VERSION}`,\n navigator.userAgent,\n ].concat(info);\n\n // store system channel\n sysChannel = data.channel;\n\n // url encode each client info item\n clientInfo.forEach((item, idx) => {\n clientInfo[idx] = encodeURIComponent(item);\n });\n\n if (sessionId === null) {\n [sessionId] = data.body;\n await storeSession(sessionId);\n }\n\n Time.setTime(time);\n\n queue.stash();\n\n queue.push(\n {\n channel: sysChannel,\n klass: SSCP_KLASS_AUTHR,\n body: [sessionId, self.PROTOCOL_VERSION, clientInfo.join(',')],\n },\n true,\n );\n\n queue.run();\n\n break;\n }\n case SSCP_KLASS_AUTHOK: {\n // We have to resubscribe to the previously\n // subscribed channels after the reconnect.\n const subscriptions = queue.getSubscriptions();\n\n subscriptions.forEach((channel) => {\n queue.push(\n {\n channel,\n klass: SSCP_KLASS_SUB,\n body: [],\n },\n true,\n );\n });\n\n queue.unstash();\n queue.run();\n\n setStateToConnected();\n break;\n }\n case SSCP_KLASS_LOGIN_OK:\n resolveLogin();\n break;\n case SSCP_KLASS_LOGIN_FAIL:\n rejectLogin();\n break;\n case SSCP_KLASS_PING:\n // ignoring ping message handling\n break;\n case SSCP_KLASS_EOC:\n self.trigger(self.ON_EOC, data.channel);\n break;\n default:\n self.trigger(self.ON_MESSAGE, data);\n break;\n }\n };\n\n const handleDemographicsCounter = (channel, data) => {\n self.send(channel, 'avgcounter', data);\n };\n\n /**\n * @internal\n */\n self.PARAM_SESSION_ID = PARAM_SESSION_ID;\n\n /**\n * @internal\n */\n self.resetSession = resetSession;\n\n /*\n * Public methods\n */\n\n self.connect = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::connect');\n\n ConnectionManager.connect();\n };\n\n self.disconnect = () => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse:disconnect');\n\n ConnectionManager.disconnect();\n };\n\n self.send = (channel, klass, body) => {\n Logger.log(Logger.TYPE_PROTOCOL, 'Enmasse::send', channel, klass, body);\n\n body = body || [];\n\n queue.push({\n channel,\n klass,\n body,\n });\n\n if (state === self.STATE_CONNECTED) {\n queue.run();\n }\n };\n\n self.getSessionId = () => sessionId;\n\n self.getState = () => state;\n\n self.subscribe = (channel) => {\n self.send(channel, SSCP_KLASS_SUB);\n };\n\n self.unsubscribe = (channel) => {\n self.send(channel, SSCP_KLASS_UNSUB);\n };\n\n self.login = (\n userId,\n timestamp,\n signature,\n success = () => {},\n failure = () => {},\n ) => {\n if (sysChannel === null) {\n return;\n }\n\n if (loginContext.inProgress) {\n console.warn('Login is already in progress');\n return;\n }\n\n loginContext = { inProgress: true, success, failure };\n\n self.send(sysChannel, SSCP_KLASS_LOGIN, [userId, timestamp, signature]);\n };\n\n self.signIn = (...args) => {\n console.warn(\n // eslint-disable-next-line\n `signIn() method is deprecated and will be removed in future versions. Please use login() method instead`,\n );\n\n self.login(args);\n };\n\n self.init = async function init(config = () => {}) {\n // config file is passed either as GET parameter or via constructor\n configFile = !ENMASSE_CONFIG ? config.config || null : ENMASSE_CONFIG;\n info = config.info || [];\n sessionId = await restoreSession();\n\n if (typeof config.forceSecure === 'boolean') {\n forceSecure = config.forceSecure;\n }\n\n if (configFile === null) {\n // eslint-disable-next-line\n throw 'Enmasse config file is not set';\n }\n\n // If session id has invalid format\n if (sessionId !== null && !validateSession(sessionId)) {\n await resetSession();\n }\n\n queue = new Queue({\n runner,\n });\n\n TransportManager.bind(\n TransportManager.ON_READY,\n handleTransportManagerReady,\n );\n ConnectionManager.bind(\n ConnectionManager.ON_STATE,\n handleConnectionManagerState,\n );\n ConnectionManager.bind(\n ConnectionManager.ON_MESSAGE,\n handleConnectionManagerMessage,\n );\n Demographics.bind(Demographics.ON_ADD_COUNTER, handleDemographicsCounter);\n\n try {\n const response = await fetch(configFile);\n\n const { status, statusText: text } = response;\n\n let data;\n\n try {\n data = await response.json();\n } catch (jsonErr) {\n self.trigger(self.ON_ERROR, `Invalid JSON from config ${configFile}`);\n return;\n }\n\n const isSuccess =\n (status >= 200 && status <= 300) ||\n // If you conclude with an XMLHttpRequest receiving status=0 and\n // statusText=null, this means the request was not allowed to be\n // performed.\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#xmlhttprequests_being_stopped\n (status === 0 && !!text) ||\n status === '';\n\n data.forceSecure = forceSecure;\n\n if (data.background_timeout === undefined) {\n data.background_timeout = 0;\n }\n\n if (isSuccess) {\n ConnectionManager.init(data);\n TransportManager.init(data);\n } else {\n self.trigger(self.ON_ERROR, `Failed to load config ${configFile}`);\n }\n } catch (err) {\n self.trigger(self.ON_ERROR, `Error loading config: ${err.message}`);\n }\n };\n\n return self;\n})();\n\nexport default Enmasse;\n"],"names":["ARG_OVERRIDE_METHODS","ARG_DEBUG","ARG_CONFIG","SSCP_KLASS_AUTH","SSCP_KLASS_AUTHR","SSCP_KLASS_AUTHOK","SSCP_KLASS_PING","SSCP_KLASS_SUB","SSCP_KLASS_UNSUB","SSCP_KLASS_EOC","SSCP_KLASS_LOGIN","SSCP_KLASS_LOGIN_OK","SSCP_KLASS_LOGIN_FAIL","SSCP_KLASS_COUNTER","getSettingFor","name","checkStorageAvailability","value","getStorageItem","window","_URL","URL","location","href","searchParams","has","get","getSettingForMethods","split","undefined","ENMASSE_OVERRIDE_METHODS","ENMASSE_DEBUG","ENMASSE_CONFIG","TYPE_PROTOCOL","TYPE_MANAGER","TYPE_TRANSPORT","TYPE_DRIVER","TYPE_QUEUE","TYPE_TIME","TYPE_MANAGER_EXTRA","TYPE_DRIVER_EXTRA","TYPE_SERVICE","LEVELS","brief","full","exhaustive","log","_console","console","_len","arguments","length","args","Array","_key","type","rest","slice","apply","_toConsumableArray","Queue","config","_classCallCheck","queue","stashed","running","runner","subscriptions","_createClass","key","push","message","force","Logger","klass","channel","indexOf","index","splice","getSubscriptions","run","concat","shift","success","failure","stash","item","unstash","local","Date","serverTime","clientTimeAtSync","setTime","newTime","now","elapsedTime","Math","round","Transport","_Emitter","_this","_callSuper","state","STATE_DISCONNECTED","trigger","emit","bind","on","unbind","off","_inherits","Emitter","_defineProperty","Driver","connected","connect","disconnect","send","init","ON_READY","globals","getGlobal","XHRDriver","_Driver","requests","requestIdx","_request","url","abort","self","xhr","XMLHttpRequest","method","XDomainRequest","open","setRequestHeader","_idx","onload","onLoad","responseText","_parseResponse","onerror","onError","_onabort","response","data","chunks","i","l","_chunks$i$split","_chunks$i$split2","_slicedToArray","normalisedValue","decodeURIComponent","replace","constructor","_removeRequest","idx","Object","prototype","hasOwnProperty","call","ON_CONNECTED","ON_DISCONNECTED","_this2","retry","onSuccess","onFailure","onAbort","setTimeout","request_retries","request_retry_delay","hasSupport","WebSocketDriver","websocket","closeTimeout","_onMessage","e","ON_MESSAGE","_onOpen","_onClose","_disconnect","_onError","onmessage","onopen","onclose","clearTimeout","host","port","secure","WebSocket","close","COMMAND_CONNECT","COMMAND_PASS","COMMAND_POLL","ProxyTransport","_Transport","driver","proxyIp","childId","clientId","sessionId","_handleDriverReady","_handleDriverConnected","_handleDriverDisconnected","_url","getTime","params","sscp","String","STATE_CONNECTED","STATE_DISCONNECTING","ON_CONNECT_FAILED","STATE_CONNECTING","_poll","_connect","proxy","parseInt","clientid","childid","sid","ON_CONNECT_LOST","SocketTransport","_handleDriverMessage","METHOD_PROXY","METHOD_WEBSOCKET","TransportManager","methods","transports","loaded","sequence","allowed","protocol","unsuccessful","_instantiate","forEach","_getMethodConfig","hosts","floor","random","TransportKlass","transport","DriverKlass","secure_port","_handleTransportReady","find","current","next","reset","addUnsuccessful","_this3","forceSecure","filter","ConnectionManager","CONNECT_DELAYS","ON_STATE","attempt","backgroundedAt","inactivityTimeout","start","stamp","Time","interval","setInterval","inactivity_timeout","resolve","stop","clearInterval","disconnectingOnConnectLost","connectTimeout","timeout","connect_timeout","disconnectingOnConnectFailed","connectDelay","active","delay","initTransport","newTransport","handleTransportMessage","handleTransportConnected","handleTransportConnectFailed","handleTransportConnectLost","handleTransportDisconnected","teardownTransport","messages","setStateToConnected","disconnectedOnConnectLost","disconnectedOnConnectFailed","setStateToDisconnected","setStateToConnecting","setStateToDisconnecting","handleVisibilityChange","document","visibilityState","background_timeout","handleNetworkStatus","navigator","onLine","addEventListener","removeEventListener","getConnectAttempt","cfg","Demographics","ON_ADD_COUNTER","addCounter","eventId","segment","counter","min","max","keys","v","join","values","Enmasse","VERSION","version","PROTOCOL_VERSION","ON_EOC","ON_ERROR","PARAM_SESSION_ID","configFile","info","sysChannel","loginContext","inProgress","storeSession","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","id","_t","wrap","_context","prev","storageWrite","error","getErrorMessage","_x","restoreSession","_ref2","_callee2","restoredId","_t2","_t3","_context2","storageRead","sent","abrupt","getParentApplication","getItem","err","resetSession","_ref3","_callee3","_t4","_context3","storageRemove","validateSession","test","finaliseLogin","callback","resolveLogin","rejectLogin","time","parseSSCP","sent_at","body","separator1","separator2","substr","separator3","stringifySSCP","handleTransportManagerReady","handleConnectionManagerState","handleConnectionManagerMessage","_ref4","_callee4","clientInfo","_data$body","_t5","_context4","userAgent","encodeURIComponent","_x2","handleDemographicsCounter","getSessionId","getState","subscribe","unsubscribe","login","userId","timestamp","signature","warn","signIn","_len2","_key2","_init","_callee5","status","text","isSuccess","_args5","_t7","_context5","fetch","statusText","json","_t6"],"mappings":"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"}