@monterosa/sdk-enmasse-kit 2.0.0-rc.1 → 2.0.0-rc.3

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.
@@ -59,7 +59,7 @@ const ENMASSE_OVERRIDE_METHODS = getSettingForMethods();
59
59
  const ENMASSE_DEBUG = getSettingFor(ARG_DEBUG);
60
60
  const ENMASSE_CONFIG = getSettingFor(ARG_CONFIG);
61
61
 
62
- var version = "2.0.0-rc.1";
62
+ var version = "2.0.0-rc.3";
63
63
 
64
64
  /* eslint no-bitwise: "off" */
65
65
 
@@ -2177,4 +2177,4 @@ const Enmasse = (() => {
2177
2177
  })();
2178
2178
 
2179
2179
  module.exports = Enmasse;
2180
- //# sourceMappingURL=index.cjs.js.map
2180
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","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_LOGOUT = 'logout';\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_LOGOUT,\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_LOGOUT:\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_LOGOUT,\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_LOGOUT = SSCP_KLASS_LOGOUT;\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.logout = () => {\n if (sysChannel === null) {\n return;\n }\n\n if (loginContext.inProgress) {\n rejectLogin();\n }\n\n self.send(sysChannel, SSCP_KLASS_LOGOUT);\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":["checkStorageAvailability","getStorageItem","Logger.log","Logger.TYPE_QUEUE","Logger.TYPE_TIME","Emitter","globals","getGlobal","Logger.TYPE_DRIVER_EXTRA","Logger.TYPE_DRIVER","Logger.TYPE_TRANSPORT","Logger.TYPE_MANAGER","Logger.TYPE_MANAGER_EXTRA","Time.now","TransportManager","Logger.TYPE_SERVICE","Demographics","storageWrite","getErrorMessage","storageRead","getParentApplication","getItem","storageRemove","Logger.TYPE_PROTOCOL","Time.setTime"],"mappings":"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"}