@monterosa/sdk-enmasse-kit 0.18.8 → 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.
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm2017.js +360 -664
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm5.js +411 -741
- package/dist/index.esm5.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm2017.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","constructor","config","queue","stashed","running","runner","subscriptions","push","message","force","Logger","klass","channel","indexOf","index","splice","getSubscriptions","run","shift","success","failure","stash","item","unstash","local","Date","serverTime","clientTimeAtSync","setTime","newTime","now","elapsedTime","Math","round","Transport","Emitter","state","STATE_DISCONNECTED","trigger","emit","bind","on","unbind","off","Driver","connected","connect","disconnect","send","init","ON_READY","globals","getGlobal","XHRDriver","requests","requestIdx","_request","url","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","Array","_removeRequest","idx","Object","prototype","hasOwnProperty","call","ON_CONNECTED","ON_DISCONNECTED","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","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","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","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","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.esm2017.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","_len","arguments","length","args","Array","_key","type","rest","slice","Queue","constructor","config","queue","stashed","running","runner","subscriptions","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","state","STATE_DISCONNECTED","trigger","emit","bind","on","unbind","off","_defineProperty","Driver","connected","connect","disconnect","send","init","ON_READY","globals","getGlobal","XHRDriver","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","key","normalisedValue","decodeURIComponent","replace","_removeRequest","idx","Object","prototype","hasOwnProperty","call","ON_CONNECTED","ON_DISCONNECTED","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","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","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","apply","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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"}
|