From 3b43abc429aa3057fcf027391e11072d924721fb Mon Sep 17 00:00:00 2001 From: Alexander Emelin Date: Tue, 12 Oct 2021 17:43:45 +0300 Subject: [PATCH] fix server-side subscribe/unsubscribe, prepare 2.8.3 --- CHANGELOG.md | 5 +++++ dist/centrifuge.js | 8 ++++---- dist/centrifuge.js.map | 2 +- dist/centrifuge.min.js | 2 +- dist/centrifuge.min.js.map | 2 +- dist/centrifuge.protobuf.js | 8 ++++---- dist/centrifuge.protobuf.js.map | 2 +- dist/centrifuge.protobuf.min.js | 2 +- dist/centrifuge.protobuf.min.js.map | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/centrifuge.js | 8 ++++---- src/protobuf.js | 2 +- 13 files changed, 27 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e435812..e20428b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +2.8.3 +===== + +* Fix regression of 2.8.0: handle server-side subscribe and unsubscribe pushes. + 2.8.2 ===== diff --git a/dist/centrifuge.js b/dist/centrifuge.js index 7024fb15..6d822e95 100644 --- a/dist/centrifuge.js +++ b/dist/centrifuge.js @@ -2013,12 +2013,12 @@ var Centrifuge = /*#__PURE__*/function (_EventEmitter) { var leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data); this._handleLeave(channel, leave); - } else if (type === this._pushType.UNSUB) { - var unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data); + } else if (type === this._pushType.UNSUBSCRIBE) { + var unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleUnsub(channel, unsub); - } else if (type === this._pushType.SUB) { - var sub = this._decoder.decodePushData(this._pushType.SUB, push.data); + } else if (type === this._pushType.SUBSCRIBE) { + var sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleSub(channel, sub); } diff --git a/dist/centrifuge.js.map b/dist/centrifuge.js.map index 9425c38f..49f053c2 100644 --- a/dist/centrifuge.js.map +++ b/dist/centrifuge.js.map @@ -1 +1 @@ -{"version":3,"file":"centrifuge.js","mappings":"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ACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;UChfA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;UEPD;UACA;UACA;UACA","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/before-startup","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(579);\n",""],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","isProtobufURL","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","map","c","split","filter","r","methodType","pushType","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","res","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"centrifuge.js","mappings":"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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;UChfA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;UEPD;UACA;UACA;UACA","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/before-startup","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUBSCRIBE) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUBSCRIBE) {\n const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(579);\n",""],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","isProtobufURL","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","_handleUnsub","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","map","c","split","filter","r","methodType","pushType","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","res","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.min.js b/dist/centrifuge.min.js index ad442489..4d638dee 100644 --- a/dist/centrifuge.min.js +++ b/dist/centrifuge.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var e={382:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var s=u(n(187)),r=u(n(471)),i=n(147),o=n(853);function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){for(var n=0;n0&&(c+="&"),c+=encodeURIComponent(a)+"="+encodeURIComponent(t[a]));for(var h in c.length>0&&(c="?"+c),o.open("POST",e+c,!0),"withCredentials"in o&&(o.withCredentials=!this._config.disableWithCredentials),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.setRequestHeader("Content-Type","application/json"),s)s.hasOwnProperty(h)&&o.setRequestHeader(h,s[h]);return o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e,t=!1;try{e=JSON.parse(o.responseText),t=!0}catch(e){i({error:"Invalid JSON. Data was: "+o.responseText,status:200,data:null})}t&&i({data:e,status:200})}else u._log("wrong status code in AJAX response",o.status),i({status:o.status,data:null})},setTimeout((function(){return o.send(JSON.stringify(r))}),20),o}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":c(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=i.JsonMethodType,this._pushType=i.JsonPushType,this._encoder=new i.JsonEncoder,this._decoder=new i.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in n.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1||"protobuf"===this._config.protocol)this._setFormat("protobuf"),this._protocol="protobuf";else{if(""!==this._config.protocol&&"json"!==this._config.protocol)throw new Error("unsupported protocol "+this._config.protocol);this._setFormat("json")}if((0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===n.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=n.g.SockJS}else this._debug("client will connect to websocket endpoint");this._xmlhttprequest=this._config.xmlhttprequest}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var n=this._callbacks[t];clearTimeout(n.timeout);var s=n.errback;if(!s)continue;s({error:this._createErrorObject("disconnected")})}for(var r in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];e?(i._isSuccess()&&(i._triggerUnsubscribe(),i._recover=!0),i._shouldResubscribe()&&i._setSubscribing()):i._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var n=t.id;if(n in this._callbacks){var s=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,s.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_getSubProtocol",value:function(){return this._protocol?"centrifuge-"+this._protocol:""}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),null!==this._config.sockjsTimeout&&(t.timeout=this._config.sockjsTimeout),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket;var n=this._getSubProtocol();this._transport=""!==n?new this._websocket(this._url,n):new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var n={},s=!1;for(var r in e._serverSubs)if(e._serverSubs.hasOwnProperty(r)&&e._serverSubs[r].recoverable){s=!0;var i={recover:!0};e._serverSubs[r].seq||e._serverSubs[r].gen?(e._serverSubs[r].seq&&(i.seq=e._serverSubs[r].seq),e._serverSubs[r].gen&&(i.gen=e._serverSubs[r].gen)):e._serverSubs[r].offset&&(i.offset=e._serverSubs[r].offset),e._serverSubs[r].epoch&&(i.epoch=e._serverSubs[r].epoch),n[r]=i}s&&(t.params||(t.params={}),t.params.subs=n),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),s),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var n=d,s=!0;if(t&&"reason"in t&&t.reason)try{var r=JSON.parse(t.reason);e._debug("reason is an advice object",r),n=r.reason,s=r.reconnect}catch(s){n=t.reason,e._debug("reason is a plain string",n)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:n,reconnect:s}),e._disconnect(n,s),!0===e._reconnect){e._reconnecting=!0;var i=e._getRetryInterval();e._debug("reconnect after "+i+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),i)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var n={data:t};""!==e&&(n.method=e);var s={method:this._methodType.RPC,params:n};return this._methodCall(s,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var n={channel:e};return void 0!==t&&(t.since&&(n.since={offset:t.since.offset},t.since.epoch&&(n.since.epoch=t.since.epoch)),void 0!==t.limit&&(n.limit=t.limit),!0===t.reverse&&(n.reverse=!0)),n}},{key:"_methodCall",value:function(e,t){var n=this;return this.isConnected()?new Promise((function(s,r){n._call(e).then((function(r){s(t(n._decoder.decodeCommandResult(e.method,r.result))),r.next&&r.next()}),(function(e){r(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var n={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(n,(function(){return{}}))}},{key:"history",value:function(e,t){var n=this._getHistoryParams(e,t),s={method:this._methodType.HISTORY,params:n};return this._methodCall(s,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,n=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(n,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var n=this,s=Promise.resolve(),r=function(t){e.hasOwnProperty(t)&&(s=s.then((function(){return n._dispatchReply(e[t])})))};for(var i in e)r(i);s=s.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,n=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),n;var s=e.id;return s&&s>0?this._handleReply(e,t):this._handlePush(e.result,t),n}},{key:"_call",value:function(e){var t=this;return new Promise((function(n,s){var r=t._addMessage(e);t._registerCall(r,n,s)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var n=t||!1;if(!1===n&&(this._reconnect=!1),this._isDisconnected())n||this._clearConnectedState(n);else{if(this._clearConnectedState(n),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var s in this._serverSubs)this._serverSubs.hasOwnProperty(s)&&this.emit("unsubscribe",{channel:s});this.emit("disconnect",{reason:e,reconnect:n})}!1===n&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,n=this._newXHRID(),s=function(s){if(n in e._xhrs&&delete e._xhrs[n],e._clientID===t)if(s.error||200!==s.status){if(s.error?e._debug("error refreshing connection token",s.error):e._debug("error refreshing connection token: wrong status code",s.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var r=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),i=e._config.refreshInterval+r;e._refreshTimeout=setTimeout((function(){return e._refresh()}),i)}else if(e._numRefreshFailed=0,e._token=s.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},s);else{var r=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,s);this._xhrs[n]=r}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var n=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),n)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var n=this._clientID,s=this._newXHRID(),r=function(r){if(s in t._xhrs&&delete t._xhrs[s],!r.error&&200===r.status&&t._clientID===n){var i={};if(r.data.channels)for(var o in r.data.channels){var u=r.data.channels[o];u.channel&&(i[u.channel]=u.token)}var c=i[e];if(c){var a={method:t._methodType.SUB_REFRESH,params:{channel:e,token:c}};null!==t._getSub(e)&&t._call(a).then((function(n){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,n.result)),n.next&&n.next()}),(function(n){t._subRefreshError(e,n.error),n.next&&n.next()}))}}},i={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},r);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,r);this._xhrs[s]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var n=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var s=Math.round(1e3*Math.random()),r=setTimeout((function(){return n._subRefresh(e)}),this._config.subRefreshInterval+s);this._subRefreshTimeouts[e]=r}}},{key:"_subRefreshResponse",value:function(e,t){var n=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var s=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=s}}},{key:"_subscribe",value:function(e,t){var n=this;this._debug("subscribing on",e.channel);var s=e.channel;if(s in this._subs||(this._subs[s]=e),this.isConnected()){e._setSubscribing(t);var r={method:this._methodType.SUBSCRIBE,params:{channel:s}};if((0,o.startsWith)(s,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[s]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var i=e._needRecover();if(!0===i){r.params.recover=!0;var u=this._getLastSeq(s),c=this._getLastGen(s);if(u||c)u&&(r.params.seq=u),c&&(r.params.gen=c);else{var a=this._getLastOffset(s);a&&(r.params.offset=a)}var h=this._getLastEpoch(s);h&&(r.params.epoch=h)}this._call(r).then((function(e){n._subscribeResponse(s,i,n._decoder.decodeCommandResult(n._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){n._subscribeError(s,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var n=this,s=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var r in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return n._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];i._shouldResubscribe()&&this._subscribe(i,s)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],s={channel:t,isResubscribe:void 0!==this._serverSubs[t]};s=this._expandSubscribeContext(s,n),this.emit("subscribe",s)}for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];if(i.recovered){var o=i.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(r,o[u])}this._serverSubs[r]={seq:i.seq,gen:i.gen,offset:i.offset,epoch:i.epoch,recoverable:i.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var n=this._getSub(e);n&&n._isSubscribing()&&(0!==t.code||t.message!==_?n._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var n=!1;"recovered"in t&&(n=t.recovered),e.recovered=n;var s=!1;"positioned"in t&&(s=t.positioned);var r="";"epoch"in t&&(r=t.epoch);var i=0;return"offset"in t&&(i=t.offset),s&&(e.streamPosition={offset:i,epoch:r}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,n){var s=this,r=this._getSub(e);if(r&&r._isSubscribing()){r._setSubscribeSuccess(n);var i=n.publications;if(i&&i.length>0)for(var o in i.length>=2&&!i[0].offset&&!i[1].offset&&(i=i.reverse()),i)i.hasOwnProperty(o)&&this._handlePublication(e,i[o]);if(!n.recoverable||t&&n.recovered||(this._lastSeq[e]=n.seq||0,this._lastGen[e]=n.gen||0,this._lastOffset[e]=n.offset||0),this._lastEpoch[e]=n.epoch||"",n.recoverable&&(r._recoverable=!0),!0===n.expires){var u=setTimeout((function(){return s._subRefresh(e)}),this._getTTLMilliseconds(n.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var n=e.id,s=e.result;if(n in this._callbacks){var r=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,o.errorExists)(e)){var i=r.errback;if(!i)return void t();i({error:e.error,next:t})}else{var u=r.callback;if(!u)return;u({result:s,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("join",n):this._isServerSub(e)&&(n.channel=e,this.emit("join",n))}},{key:"_handleLeave",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("leave",n):this._isServerSub(e)&&(n.channel=e,this.emit("leave",n))}},{key:"_handleUnsub",value:function(e,t){var n={},s=this._getSub(e);s?(s.unsubscribe(),!0===t.resubscribe&&s.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],n.channel=e,this.emit("unsubscribe",n))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var n={channel:e,isResubscribe:!1};n=this._expandSubscribeContext(n,t),this.emit("subscribe",n)}},{key:"_handlePublication",value:function(e,t){var n=this._getSub(e),s={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(s.info=t.info),n?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),n.emit("publish",s)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),s.channel=e,this.emit("publish",s))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var n=this._decoder.decodePush(e),s=0;"type"in n&&(s=n.type);var r=n.channel;if(s===this._pushType.PUBLICATION){var i=this._decoder.decodePushData(this._pushType.PUBLICATION,n.data);this._handlePublication(r,i)}else if(s===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,n.data);this._handleMessage(o)}else if(s===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,n.data);this._handleJoin(r,u)}else if(s===this._pushType.LEAVE){var c=this._decoder.decodePushData(this._pushType.LEAVE,n.data);this._handleLeave(r,c)}else if(s===this._pushType.UNSUB){var a=this._decoder.decodePushData(this._pushType.UNSUB,n.data);this._handleUnsub(r,a)}else if(s===this._pushType.SUB){var h=this._decoder.decodePushData(this._pushType.SUB,n.data);this._handleSub(r,h)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,n){var s=this;this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete s._callbacks[e],(0,o.isFunction)(n)&&n({error:s._createErrorObject(_)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var n=[];for(var s in t)if(t.hasOwnProperty(s)){if(!this._getSub(s))continue;n.push(s)}if(0!==n.length){var r={client:this._clientID,channels:n},i=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===i)if(t.error||200!==t.status){for(var s in e._debug("authorization request failed"),n)if(n.hasOwnProperty(s)){var r=n[s];e._subscribeError(r,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var c in t.data.channels){var a=t.data.channels[c];a.channel&&(u[a.channel]=a.token)}var h=!1;for(var l in e._isBatching||(e.startBatching(),h=!0),n)!n.hasOwnProperty(l)||function(){var t=n[l],s=u[t];if(!s)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var r={method:e._methodType.SUBSCRIBE,params:{channel:t,token:s}},i=e._getSub(t);if(null===i)return"continue";var o=i._needRecover();if(!0===o){r.params.recover=!0;var c=e._getLastSeq(t),a=e._getLastGen(t);if(c||a)c&&(r.params.seq=c),a&&(r.params.gen=a);else{var h=e._getLastOffset(t);h&&(r.params.offset=h)}var f=e._getLastEpoch(t);f&&(r.params.epoch=f)}e._call(r).then((function(n){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,n.result)),n.next&&n.next()}),(function(n){e._subscribeError(t,n.error),n.next&&n.next()}))}();h&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:r},u);else{var c=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,r,u);this._xhrs[o]=c}}else this._debug("no private channels found, no need to make request")}},{key:"_setSubscribeSince",value:function(e,t){this._lastOffset[e.channel]=t.offset,this._lastEpoch[e.channel]=t.epoch,e._setNeedRecover(!0)}},{key:"subscribe",value:function(e,t,n){var s=this._getSub(e);if(null!==s)return s._setEvents(t),s._isUnsubscribed()&&s.subscribe(),s;var i=new r.default(this,e,t);return this._subs[e]=i,n&&n.since&&this._setSubscribeSince(i,n.since),i.subscribe(),i}}])&&a(t.prototype,s),b}(s.default);t.Centrifuge=p},579:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=n(382).Centrifuge;t.default=s,e.exports=t.default},147:function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&o.length>r&&!o.warned){o.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=o.length,a=h,console&&console.warn&&console.warn(a)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,n){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=h.bind(s);return r.listener=n,s.wrapFn=r,r}function f(e,t,n){var s=e._events;if(void 0===s)return[];var r=s[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var c=i[e];if(void 0===c)return!1;if("function"==typeof c)s(c,this,t);else{var a=c.length,h=d(c,a);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){o=n[i].listener,r=i;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):_.call(e,t)},i.prototype.listenerCount=_,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(s){var r=t[s];if(void 0!==r)return r.exports;var i=t[s]={exports:{}};return e[s](i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(579)}()})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var e={382:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var s=u(n(187)),r=u(n(471)),i=n(147),o=n(853);function u(e){return e&&e.__esModule?e:{default:e}}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){for(var n=0;n0&&(c+="&"),c+=encodeURIComponent(a)+"="+encodeURIComponent(t[a]));for(var h in c.length>0&&(c="?"+c),o.open("POST",e+c,!0),"withCredentials"in o&&(o.withCredentials=!this._config.disableWithCredentials),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.setRequestHeader("Content-Type","application/json"),s)s.hasOwnProperty(h)&&o.setRequestHeader(h,s[h]);return o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e,t=!1;try{e=JSON.parse(o.responseText),t=!0}catch(e){i({error:"Invalid JSON. Data was: "+o.responseText,status:200,data:null})}t&&i({data:e,status:200})}else u._log("wrong status code in AJAX response",o.status),i({status:o.status,data:null})},setTimeout((function(){return o.send(JSON.stringify(r))}),20),o}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":c(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=i.JsonMethodType,this._pushType=i.JsonPushType,this._encoder=new i.JsonEncoder,this._decoder=new i.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in n.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1||"protobuf"===this._config.protocol)this._setFormat("protobuf"),this._protocol="protobuf";else{if(""!==this._config.protocol&&"json"!==this._config.protocol)throw new Error("unsupported protocol "+this._config.protocol);this._setFormat("json")}if((0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===n.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=n.g.SockJS}else this._debug("client will connect to websocket endpoint");this._xmlhttprequest=this._config.xmlhttprequest}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var n=this._callbacks[t];clearTimeout(n.timeout);var s=n.errback;if(!s)continue;s({error:this._createErrorObject("disconnected")})}for(var r in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];e?(i._isSuccess()&&(i._triggerUnsubscribe(),i._recover=!0),i._shouldResubscribe()&&i._setSubscribing()):i._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var n=t.id;if(n in this._callbacks){var s=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,s.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_getSubProtocol",value:function(){return this._protocol?"centrifuge-"+this._protocol:""}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),null!==this._config.sockjsTimeout&&(t.timeout=this._config.sockjsTimeout),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket;var n=this._getSubProtocol();this._transport=""!==n?new this._websocket(this._url,n):new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var n={},s=!1;for(var r in e._serverSubs)if(e._serverSubs.hasOwnProperty(r)&&e._serverSubs[r].recoverable){s=!0;var i={recover:!0};e._serverSubs[r].seq||e._serverSubs[r].gen?(e._serverSubs[r].seq&&(i.seq=e._serverSubs[r].seq),e._serverSubs[r].gen&&(i.gen=e._serverSubs[r].gen)):e._serverSubs[r].offset&&(i.offset=e._serverSubs[r].offset),e._serverSubs[r].epoch&&(i.epoch=e._serverSubs[r].epoch),n[r]=i}s&&(t.params||(t.params={}),t.params.subs=n),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),s),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var n=d,s=!0;if(t&&"reason"in t&&t.reason)try{var r=JSON.parse(t.reason);e._debug("reason is an advice object",r),n=r.reason,s=r.reconnect}catch(s){n=t.reason,e._debug("reason is a plain string",n)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:n,reconnect:s}),e._disconnect(n,s),!0===e._reconnect){e._reconnecting=!0;var i=e._getRetryInterval();e._debug("reconnect after "+i+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),i)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var n={data:t};""!==e&&(n.method=e);var s={method:this._methodType.RPC,params:n};return this._methodCall(s,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var n={channel:e};return void 0!==t&&(t.since&&(n.since={offset:t.since.offset},t.since.epoch&&(n.since.epoch=t.since.epoch)),void 0!==t.limit&&(n.limit=t.limit),!0===t.reverse&&(n.reverse=!0)),n}},{key:"_methodCall",value:function(e,t){var n=this;return this.isConnected()?new Promise((function(s,r){n._call(e).then((function(r){s(t(n._decoder.decodeCommandResult(e.method,r.result))),r.next&&r.next()}),(function(e){r(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var n={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(n,(function(){return{}}))}},{key:"history",value:function(e,t){var n=this._getHistoryParams(e,t),s={method:this._methodType.HISTORY,params:n};return this._methodCall(s,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,n=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(n,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var n=this,s=Promise.resolve(),r=function(t){e.hasOwnProperty(t)&&(s=s.then((function(){return n._dispatchReply(e[t])})))};for(var i in e)r(i);s=s.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,n=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),n;var s=e.id;return s&&s>0?this._handleReply(e,t):this._handlePush(e.result,t),n}},{key:"_call",value:function(e){var t=this;return new Promise((function(n,s){var r=t._addMessage(e);t._registerCall(r,n,s)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var n=t||!1;if(!1===n&&(this._reconnect=!1),this._isDisconnected())n||this._clearConnectedState(n);else{if(this._clearConnectedState(n),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var s in this._serverSubs)this._serverSubs.hasOwnProperty(s)&&this.emit("unsubscribe",{channel:s});this.emit("disconnect",{reason:e,reconnect:n})}!1===n&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,n=this._newXHRID(),s=function(s){if(n in e._xhrs&&delete e._xhrs[n],e._clientID===t)if(s.error||200!==s.status){if(s.error?e._debug("error refreshing connection token",s.error):e._debug("error refreshing connection token: wrong status code",s.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var r=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),i=e._config.refreshInterval+r;e._refreshTimeout=setTimeout((function(){return e._refresh()}),i)}else if(e._numRefreshFailed=0,e._token=s.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},s);else{var r=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,s);this._xhrs[n]=r}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var n=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),n)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var n=this._clientID,s=this._newXHRID(),r=function(r){if(s in t._xhrs&&delete t._xhrs[s],!r.error&&200===r.status&&t._clientID===n){var i={};if(r.data.channels)for(var o in r.data.channels){var u=r.data.channels[o];u.channel&&(i[u.channel]=u.token)}var c=i[e];if(c){var a={method:t._methodType.SUB_REFRESH,params:{channel:e,token:c}};null!==t._getSub(e)&&t._call(a).then((function(n){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,n.result)),n.next&&n.next()}),(function(n){t._subRefreshError(e,n.error),n.next&&n.next()}))}}},i={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},r);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,r);this._xhrs[s]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var n=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var s=Math.round(1e3*Math.random()),r=setTimeout((function(){return n._subRefresh(e)}),this._config.subRefreshInterval+s);this._subRefreshTimeouts[e]=r}}},{key:"_subRefreshResponse",value:function(e,t){var n=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var s=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=s}}},{key:"_subscribe",value:function(e,t){var n=this;this._debug("subscribing on",e.channel);var s=e.channel;if(s in this._subs||(this._subs[s]=e),this.isConnected()){e._setSubscribing(t);var r={method:this._methodType.SUBSCRIBE,params:{channel:s}};if((0,o.startsWith)(s,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[s]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var i=e._needRecover();if(!0===i){r.params.recover=!0;var u=this._getLastSeq(s),c=this._getLastGen(s);if(u||c)u&&(r.params.seq=u),c&&(r.params.gen=c);else{var a=this._getLastOffset(s);a&&(r.params.offset=a)}var h=this._getLastEpoch(s);h&&(r.params.epoch=h)}this._call(r).then((function(e){n._subscribeResponse(s,i,n._decoder.decodeCommandResult(n._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){n._subscribeError(s,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var n=this,s=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var r in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return n._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(r)){var i=this._subs[r];i._shouldResubscribe()&&this._subscribe(i,s)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],s={channel:t,isResubscribe:void 0!==this._serverSubs[t]};s=this._expandSubscribeContext(s,n),this.emit("subscribe",s)}for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];if(i.recovered){var o=i.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(r,o[u])}this._serverSubs[r]={seq:i.seq,gen:i.gen,offset:i.offset,epoch:i.epoch,recoverable:i.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var n=this._getSub(e);n&&n._isSubscribing()&&(0!==t.code||t.message!==_?n._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var n=!1;"recovered"in t&&(n=t.recovered),e.recovered=n;var s=!1;"positioned"in t&&(s=t.positioned);var r="";"epoch"in t&&(r=t.epoch);var i=0;return"offset"in t&&(i=t.offset),s&&(e.streamPosition={offset:i,epoch:r}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,n){var s=this,r=this._getSub(e);if(r&&r._isSubscribing()){r._setSubscribeSuccess(n);var i=n.publications;if(i&&i.length>0)for(var o in i.length>=2&&!i[0].offset&&!i[1].offset&&(i=i.reverse()),i)i.hasOwnProperty(o)&&this._handlePublication(e,i[o]);if(!n.recoverable||t&&n.recovered||(this._lastSeq[e]=n.seq||0,this._lastGen[e]=n.gen||0,this._lastOffset[e]=n.offset||0),this._lastEpoch[e]=n.epoch||"",n.recoverable&&(r._recoverable=!0),!0===n.expires){var u=setTimeout((function(){return s._subRefresh(e)}),this._getTTLMilliseconds(n.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var n=e.id,s=e.result;if(n in this._callbacks){var r=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],(0,o.errorExists)(e)){var i=r.errback;if(!i)return void t();i({error:e.error,next:t})}else{var u=r.callback;if(!u)return;u({result:s,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("join",n):this._isServerSub(e)&&(n.channel=e,this.emit("join",n))}},{key:"_handleLeave",value:function(e,t){var n={info:t.info},s=this._getSub(e);s?s.emit("leave",n):this._isServerSub(e)&&(n.channel=e,this.emit("leave",n))}},{key:"_handleUnsub",value:function(e,t){var n={},s=this._getSub(e);s?(s.unsubscribe(),!0===t.resubscribe&&s.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],n.channel=e,this.emit("unsubscribe",n))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var n={channel:e,isResubscribe:!1};n=this._expandSubscribeContext(n,t),this.emit("subscribe",n)}},{key:"_handlePublication",value:function(e,t){var n=this._getSub(e),s={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(s.info=t.info),n?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),n.emit("publish",s)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),s.channel=e,this.emit("publish",s))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var n=this._decoder.decodePush(e),s=0;"type"in n&&(s=n.type);var r=n.channel;if(s===this._pushType.PUBLICATION){var i=this._decoder.decodePushData(this._pushType.PUBLICATION,n.data);this._handlePublication(r,i)}else if(s===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,n.data);this._handleMessage(o)}else if(s===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,n.data);this._handleJoin(r,u)}else if(s===this._pushType.LEAVE){var c=this._decoder.decodePushData(this._pushType.LEAVE,n.data);this._handleLeave(r,c)}else if(s===this._pushType.UNSUBSCRIBE){var a=this._decoder.decodePushData(this._pushType.UNSUBSCRIBE,n.data);this._handleUnsub(r,a)}else if(s===this._pushType.SUBSCRIBE){var h=this._decoder.decodePushData(this._pushType.UNSUBSCRIBE,n.data);this._handleSub(r,h)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,n){var s=this;this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete s._callbacks[e],(0,o.isFunction)(n)&&n({error:s._createErrorObject(_)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var n=[];for(var s in t)if(t.hasOwnProperty(s)){if(!this._getSub(s))continue;n.push(s)}if(0!==n.length){var r={client:this._clientID,channels:n},i=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===i)if(t.error||200!==t.status){for(var s in e._debug("authorization request failed"),n)if(n.hasOwnProperty(s)){var r=n[s];e._subscribeError(r,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var c in t.data.channels){var a=t.data.channels[c];a.channel&&(u[a.channel]=a.token)}var h=!1;for(var l in e._isBatching||(e.startBatching(),h=!0),n)!n.hasOwnProperty(l)||function(){var t=n[l],s=u[t];if(!s)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var r={method:e._methodType.SUBSCRIBE,params:{channel:t,token:s}},i=e._getSub(t);if(null===i)return"continue";var o=i._needRecover();if(!0===o){r.params.recover=!0;var c=e._getLastSeq(t),a=e._getLastGen(t);if(c||a)c&&(r.params.seq=c),a&&(r.params.gen=a);else{var h=e._getLastOffset(t);h&&(r.params.offset=h)}var f=e._getLastEpoch(t);f&&(r.params.epoch=f)}e._call(r).then((function(n){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,n.result)),n.next&&n.next()}),(function(n){e._subscribeError(t,n.error),n.next&&n.next()}))}();h&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:r},u);else{var c=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,r,u);this._xhrs[o]=c}}else this._debug("no private channels found, no need to make request")}},{key:"_setSubscribeSince",value:function(e,t){this._lastOffset[e.channel]=t.offset,this._lastEpoch[e.channel]=t.epoch,e._setNeedRecover(!0)}},{key:"subscribe",value:function(e,t,n){var s=this._getSub(e);if(null!==s)return s._setEvents(t),s._isUnsubscribed()&&s.subscribe(),s;var i=new r.default(this,e,t);return this._subs[e]=i,n&&n.since&&this._setSubscribeSince(i,n.since),i.subscribe(),i}}])&&a(t.prototype,s),b}(s.default);t.Centrifuge=p},579:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=n(382).Centrifuge;t.default=s,e.exports=t.default},147:function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0&&o.length>r&&!o.warned){o.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=o.length,a=h,console&&console.warn&&console.warn(a)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,n){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=h.bind(s);return r.listener=n,s.wrapFn=r,r}function f(e,t,n){var s=e._events;if(void 0===s)return[];var r=s[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var c=i[e];if(void 0===c)return!1;if("function"==typeof c)s(c,this,t);else{var a=c.length,h=d(c,a);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){o=n[i].listener,r=i;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):_.call(e,t)},i.prototype.listenerCount=_,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(s){var r=t[s];if(void 0!==r)return r.exports;var i=t[s]={exports:{}};return e[s](i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(579)}()})); //# sourceMappingURL=centrifuge.min.js.map \ No newline at end of file diff --git a/dist/centrifuge.min.js.map b/dist/centrifuge.min.js.map index 87bea9fb..e58a66a2 100644 --- a/dist/centrifuge.min.js.map +++ b/dist/centrifuge.min.js.map @@ -1 +1 @@ -{"version":3,"file":"centrifuge.min.js","mappings":"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","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(579);\n"],"names":["root","factory","exports","module","define","amd","this","_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","xhr","query","i","_debug","JSON","stringify","global","XMLHttpRequest","ActiveXObject","hasOwnProperty","length","encodeURIComponent","headerName","open","withCredentials","setRequestHeader","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","log","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","reject","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","err","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","map","c","split","filter","r","methodType","pushType","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","res","rej","_nextPromiseId","self","publish","presenceStats","history","prefix","lastIndexOf","level","args","console","logger","apply","step","pow","floor","a","b","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","init","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","keys","rawListeners","eventNames","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","g","globalThis","window"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"centrifuge.min.js","mappings":"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","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUBSCRIBE) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUBSCRIBE) {\n const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {Centrifuge} from './centrifuge.js';\nexport default Centrifuge;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(579);\n"],"names":["root","factory","exports","module","define","amd","this","_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","xhr","query","i","_debug","JSON","stringify","global","XMLHttpRequest","ActiveXObject","hasOwnProperty","length","encodeURIComponent","headerName","open","withCredentials","setRequestHeader","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","log","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","reject","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","err","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","_handleUnsub","_handleSub","messages","slice","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","map","c","split","filter","r","methodType","pushType","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","Object","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","res","rej","_nextPromiseId","self","publish","presenceStats","history","prefix","lastIndexOf","level","args","console","logger","apply","step","pow","floor","a","b","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","init","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","keys","rawListeners","eventNames","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","g","globalThis","window"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.protobuf.js b/dist/centrifuge.protobuf.js index 27b4de4c..d233fb06 100644 --- a/dist/centrifuge.protobuf.js +++ b/dist/centrifuge.protobuf.js @@ -3134,12 +3134,12 @@ var Centrifuge = /*#__PURE__*/function (_EventEmitter) { var leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data); this._handleLeave(channel, leave); - } else if (type === this._pushType.UNSUB) { - var unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data); + } else if (type === this._pushType.UNSUBSCRIBE) { + var unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleUnsub(channel, unsub); - } else if (type === this._pushType.SUB) { - var sub = this._decoder.decodePushData(this._pushType.SUB, push.data); + } else if (type === this._pushType.SUBSCRIBE) { + var sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleSub(channel, sub); } diff --git a/dist/centrifuge.protobuf.js.map b/dist/centrifuge.protobuf.js.map index a116ee47..1cf001c9 100644 --- a/dist/centrifuge.protobuf.js.map +++ b/dist/centrifuge.protobuf.js.map @@ -1 +1 @@ -{"version":3,"file":"centrifuge.protobuf.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;ACVa;AACb;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,GAAG;AACd,WAAW,MAAM;AACjB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;ACnDa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA,eAAe;AACf,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA,8BAA8B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AACxE;;;;;;;;AC1Ia;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,0BAA0B;AACzC,eAAe,MAAM;AACrB,iBAAiB,kBAAkB;AACnC,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0IAA0I,gCAAgC;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;AClGa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;;;;;;;;AC3Ea;AACb;AACA;AACA,gBAAgB,mBAAO,CAAC,GAAuB;AAC/C,gBAAgB,mBAAO,CAAC,GAAqB;AAC7C;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA,UAAU;AACV,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClHa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc,0CAA0C;AACxD;AACA;AACA,cAAc;AACd;AACA,qDAAqD;AACrD;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9Ua;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA,MAAM,aAAa;AACnB;AACA;;;;;;;;AChBa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEa;AACb;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/Ca;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,YAAY;AACZ,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxGA;;AACA;;AAEA;;AAOA;;;;;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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;AChfA;;AAEa;AACb,yCAA6C;;;;;;;ACHhC;AACb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,0BAA0B;AAC1B,4FAA4F,iBAAiB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe;AACf,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA,yBAAyB;AACzB,cAAc;AACd;AACA;AACA,gBAAgB;AAChB,0CAA0C,YAAY,KAAK;AAC3D;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU,2BAA2B;AACrC,cAAc;AACd;AACA;AACA;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU;AACV;AACA,oBAAoB,UAAU;AAC9B;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,cAAc;AACd,cAAc;;AAEd;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC,+BAA+B;AAC/B,oBAAoB,2BAA2B;AAC/C;AACA;AACA,OAAO;AACP;;AAEA,4BAA4B;AAC5B,gCAAgC;AAChC,oBAAoB,sBAAsB;AAC1C,gBAAgB;AAChB;AACA,OAAO;AACP;;AAEA,+BAA+B;AAC/B,qBAAqB;AACrB,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,WAAW;AACX,cAAc;AACd,6CAA6C;AAC7C,UAAU;AACV,OAAO;AACP;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,cAAc;AACd,6CAA6C;AAC7C,gBAAgB;AAChB,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,UAAU,2BAA2B;AACrC,0BAA0B;AAC1B;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,UAAU,OAAO;AACjB,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;ACpSa;AACb;;AAEA,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,EAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mBAAmB;AAC1H,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA,WAAW,gDAAgD;AAC3D;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA,yBAAyB;AACzB;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA,uCAAuC;AACvC,4CAA4C;AAC5C;;AAEA;AACA,yEAAyE;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA,UAAU,2BAA2B;;AAErC;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,WAAW;AACX,OAAO;;AAEP;AACA,gBAAgB,+BAA+B;AAC/C;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;;AAEA;AACA;AACA;AACA;;;;;;;;AC/Ha;AACb;;AAEA,eAAe,mBAAO,CAAC,EAAQ;AAC/B,eAAe,mBAAO,CAAC,EAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD,yCAAyC,YAAY,KAAK;AAC1D;AACA;AACA,+FAA+F;AAC/F;AACA;AACA;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU,2BAA2B;AACrC,8BAA8B,cAAc;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CA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA,wEAAwE;AACxE;AACA;AACA;AACA;AACA,mGAAmG;AACnG;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C;;AAE7C,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAsC,eAAe,KAAK,kBAAkB;AAC5E;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAA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ACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,+GAA+G;AAC1H,WAAW,4JAA4J,GAAG;AAC1K,aAAa,gBAAgB;AAC7B,yBAAyB,6FAA6F;AACtH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ha;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,WAAW,oBAAoB;AAC/B,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;;AAEA;;;;;;;AC1Ia;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA,+BAA+B;;AAE/B;AACA;AACA,cAAc;AACd;AACA,oCAAoC;;AAEpC;AACA;AACA,cAAc;AACd;AACA,2DAA2D;;AAE3D;AACA;AACA,cAAc;AACd;AACA,sCAAsC;;AAEtC;AACA;AACA,cAAc;AACd;AACA,6DAA6D;;AAE7D;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,mBAAmB;AACjC,cAAc,QAAQ;AACtB,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC/Ja;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,eAAe,mBAAO,CAAC,GAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,gBAAgB;AAC3B,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,6BAA6B;;AAE7B;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,iCAAiC;AAC/C;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA,iEAAiE,kBAAkB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,uBAAuB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,iBAAiB;AACnD,8BAA8B,yBAAyB;AACvD,WAAW,QAAQ;AACnB,aAAa,wBAAwB;AACrC,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,GAAG;AACd,aAAa,WAAW;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,uBAAuB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,MAAM;AACN,wBAAwB,6BAA6B;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,SAAS;AACpB,aAAa,uBAAuB;AACpC;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iBAAiB;AAChD,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB,IAAI,iBAAiB;AACvD,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,uBAAuB;AACxC,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,SAAS;AACtB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChba;AACb;;AAEA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B,UAAU;;AAEV;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,mBAAmB;AAChC;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,qDAAqD,iBAAiB;AACtE;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClPa;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,YAAY,mBAAO,CAAC,GAAS;AAC7B,YAAY,mBAAO,CAAC,GAAQ;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,4BAA4B;AACvC,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,mCAAmC;;AAEnC;AACA;AACA,cAAc;AACd;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,eAAe;AACrD;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;AC1Ma;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,qBAAqB,GAAG,oBAAoB,sCAAsC;AAC/F,YAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,4BAA4B;AAC5B;AACA,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,KAAK;AACL;;;;;;;;AC1Za;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;;;;;;;AClDa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;;AAEA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe;AAC1B,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe,sCAAsC,sBAAsB;AACtF,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe,sCAAsC,sBAAsB;AACtF,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAM;;AAEN;AACA,wDAAwD;;AAExD,MAAM;;AAEN;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,+DAA+D;AAC/D;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;;AAEN;AACA,+CAA+C;;AAE/C,MAAM;;AAEN,wBAAwB,iDAAiD;AACzE;;AAEA;AACA,+CAA+C;;AAE/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Wa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,sBAAsB;AACvD;AACA,UAAU;AACV,WAAW,mCAAmC,YAAY,IAAI;AAC9D,WAAW,YAAY;AACvB,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,mCAAmC,cAAc;AACjD;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,iBAAiB;AAC5B,aAAa;AACb;;AAEA,cAAc,mBAAO,CAAC,GAAe;;;;;;;;ACnCxB;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;;AAEA;AACA,yCAAyC,sCAAsC;AAC/E;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;;AAEA;AACA,+BAA+B,mBAAmB,eAAe,qBAAqB;AACtF;AACA;AACA;AACA,UAAU;AACV,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa,wBAAwB;AACrC;;AAEA;AACA;AACA,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,mCAAmC,kCAAkC;AACrE,WAAW,qCAAqC;AAChD,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAAgC,mCAAmC;AACnE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ia;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,aAAa,mBAAO,CAAC,GAAU;AAC/B,aAAa,mBAAO,CAAC,GAAQ;AAC7B,aAAa,mBAAO,CAAC,GAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,YAAY,WAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,uBAAuB;;AAEvB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,yBAAyB;AACvC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA,4BAA4B,gDAAgD;AAC5E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;ACtKa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,EAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,uBAAuB;;AAEvB;AACA;AACA,cAAc;AACd;AACA,6BAA6B;;AAE7B;AACA;AACA,cAAc;AACd;AACA,iCAAiC;;AAEjC;AACA;AACA,cAAc;AACd;AACA,+BAA+B;;AAE/B;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8DAA8D,kBAAkB;AAChF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gGAAgG,eAAe,0GAA0G,cAAc;AACvO;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,+CAA+C;AAClE,gDAAgD;;AAEhD;AACA;AACA,wBAAwB,+CAA+C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA,uBAAuB;AACvB;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC,cAAc,wBAAwB;AACtC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,6BAA6B,uBAAuB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,MAAM;AACnB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,MAAM;AACnB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,UAAU,GAAG;AAC1B;AACA;AACA;AACA;;AAEA;AACA,YAAY,yBAAyB,GAAG,0BAA0B,KAAK,yBAAyB;AAChG,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,+CAA+C;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,0BAA0B;AAClF,WAAW,UAAU,qBAAqB;AAC1C,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,iDAAiD;AACjD;;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CAAC,GAAQ;;AAE/B;AACA;AACA,sBAAsB;AACtB,2CAA2C,gCAAgC;AAC3E,qDAAqD,gCAAgC;AACrF;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;;AAE/B;AACA;AACA,6CAA6C,+BAA+B;AAC5E;AACA;;;AAGA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,gEAAgE,mBAAO,CAAC,GAAQ;AAChF;AACA,CAAC;;;;;;;;AChNY;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA,6BAA6B;AAC7B,6CAA6C;AAC7C,2BAA2B;;AAE3B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvMa;AACb;;AAEA;AACA,iBAAiB,mBAAO,CAAC,GAAuB;;AAEhD;AACA,cAAc,mBAAO,CAAC,GAAoB;;AAE1C;AACA,oBAAoB,mBAAO,CAAC,GAA0B;;AAEtD;AACA,aAAa,mBAAO,CAAC,GAAmB;;AAExC;AACA,eAAe,mBAAO,CAAC,GAAqB;;AAE5C;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,qFAAqF;;AAErF;AACA;AACA,UAAU;AACV;AACA;AACA,mDAAmD,mCAAmC;;AAEtF;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,kCAAkC,EAAE;;AAEpC;AACA;AACA,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,mBAAmB;AAChC;AACA,qCAAqC;AACrC,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,oBAAoB;AACjC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,iDAAiD,kBAAkB,mBAAmB;;AAEtF;AACA;AACA;AACA;AACA,mDAAmD,gCAAgC;;AAEnF;AACA;AACA;;AAEA;;AAEA,2DAA2D,kBAAkB,gBAAgB;;AAE7F;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA,qCAAqC;AACrC,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,aAAa,kBAAkB;AAC/B;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,aAAa;AAC1B;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,wBAAwB;AACxB,gEAAgE,QAAQ;AACxE;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,WAAW,kBAAkB;AAC7B,aAAa;AACb;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,aAAa;AAC1B;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpaa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAQ;;AAEhC;AACA,kIAAkI,oBAAoB;AACtJ;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yBAAyB;AACzB;AACA;AACA,2EAA2E,iBAAiB;AAC5F;AACA;AACA;AACA,eAAe;AACf,UAAU;AACV;AACA,eAAe;AACf,6CAA6C;AAC7C;AACA;AACA,eAAe;AACf;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,oBAAoB,gDAAgD;AACpE;AACA;;AAEA;AACA,6CAA6C,qBAAqB;;AAElE;AACA,yBAAyB;AACzB;AACA;AACA;AACA,0BAA0B,WAAW,KAAK;AAC1C;AACA;AACA,eAAe;;AAEf;AACA,UAAU,2BAA2B;AACrC;AACA;AACA,0BAA0B,YAAY,KAAK;AAC3C;AACA,eAAe;;AAEf;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;;;;;;AChLa;;AAEb;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,GAAW;;AAEjC;AACA,qCAAqC,eAAe;AACpD;AACA,UAAU;AACV,WAAW,mBAAmB;AAC9B,aAAa,UAAU,GAAG;AAC1B;AACA;;AAEA;AACA,mCAAmC,eAAe;AAClD;AACA,UAAU;AACV,WAAW,UAAU,GAAG;AACxB,WAAW,oBAAoB;AAC/B,aAAa,mBAAmB;AAChC;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C;AACA,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACrGa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,oBAAoB;AACpB;;AAEA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB,GAAG,oBAAoB,yCAAyC;AAClG;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,0BAA0B,IAAI,4BAA4B;AACtE,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AChda;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;;;;;;;;;;;;;UCpFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;UEPD;UACA;UACA;UACA","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/before-startup","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUBSCRIBE: proto.lookupEnum('PushType').values.UNSUBSCRIBE,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUBSCRIBE: proto.lookupEnum('PushType').values.SUBSCRIBE\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUBSCRIBE: proto.lookupType('protocol.Unsubscribe'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUBSCRIBE: proto.lookupType('protocol.Subscribe')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUBSCRIBE:\n type = PushSchema.UNSUBSCRIBE;\n break;\n case protobufPushType.SUBSCRIBE:\n type = PushSchema.SUBSCRIBE;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(714);\n",""],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","isProtobufURL","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","CentrifugeProtobuf","map","c","split","filter","r","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","Object","assign","encode","finish","encodeDelimited","ProtobufDecoder","reader","Reader","Uint8Array","pos","len","decodeDelimited","_decode","res","decode","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"centrifuge.protobuf.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;ACVa;AACb;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,GAAG;AACd,WAAW,MAAM;AACjB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;ACnDa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA,eAAe;AACf,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA,8BAA8B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AACxE;;;;;;;;AC1Ia;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,0BAA0B;AACzC,eAAe,MAAM;AACrB,iBAAiB,kBAAkB;AACnC,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0IAA0I,gCAAgC;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;AClGa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;;;;;;;;AC3Ea;AACb;AACA;AACA,gBAAgB,mBAAO,CAAC,GAAuB;AAC/C,gBAAgB,mBAAO,CAAC,GAAqB;AAC7C;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA,UAAU;AACV,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,cAAc;AACzB,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClHa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc,0CAA0C;AACxD;AACA;AACA,cAAc;AACd;AACA,qDAAqD;AACrD;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9Ua;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA,MAAM,aAAa;AACnB;AACA;;;;;;;;AChBa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChEa;AACb;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/Ca;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,YAAY;AACZ,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxGA;;AACA;;AAEA;;AAOA;;;;;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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;AChfA;;AAEa;AACb,yCAA6C;;;;;;;ACHhC;AACb;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,0BAA0B;AAC1B,4FAA4F,iBAAiB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe;AACf,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA,yBAAyB;AACzB,cAAc;AACd;AACA;AACA,gBAAgB;AAChB,0CAA0C,YAAY,KAAK;AAC3D;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU,2BAA2B;AACrC,cAAc;AACd;AACA;AACA;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU;AACV;AACA,oBAAoB,UAAU;AAC9B;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,cAAc;AACd,cAAc;;AAEd;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC,+BAA+B;AAC/B,oBAAoB,2BAA2B;AAC/C;AACA;AACA,OAAO;AACP;;AAEA,4BAA4B;AAC5B,gCAAgC;AAChC,oBAAoB,sBAAsB;AAC1C,gBAAgB;AAChB;AACA,OAAO;AACP;;AAEA,+BAA+B;AAC/B,qBAAqB;AACrB,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,WAAW;AACX,cAAc;AACd,6CAA6C;AAC7C,UAAU;AACV,OAAO;AACP;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,cAAc;AACd,6CAA6C;AAC7C,gBAAgB;AAChB,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,UAAU,2BAA2B;AACrC,0BAA0B;AAC1B;AACA,sBAAsB,aAAa,KAAK;AACxC;AACA,WAAW;AACX,UAAU,OAAO;AACjB,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;ACpSa;AACb;;AAEA,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,EAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mBAAmB;AAC1H,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA,WAAW,gDAAgD;AAC3D;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA,yBAAyB;AACzB;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA,uCAAuC;AACvC,4CAA4C;AAC5C;;AAEA;AACA,yEAAyE;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA,UAAU,2BAA2B;;AAErC;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,WAAW;AACX,OAAO;;AAEP;AACA,gBAAgB,+BAA+B;AAC/C;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;;AAEA;AACA;AACA;AACA;;;;;;;;AC/Ha;AACb;;AAEA,eAAe,mBAAO,CAAC,EAAQ;AAC/B,eAAe,mBAAO,CAAC,EAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD,yCAAyC,YAAY,KAAK;AAC1D;AACA;AACA,+FAA+F;AAC/F;AACA;AACA;AACA,WAAW;AACX,OAAO;;AAEP;AACA,UAAU,2BAA2B;AACrC,8BAA8B,cAA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AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA,wEAAwE;AACxE;AACA;AACA;AACA;AACA,mGAAmG;AACnG;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C;;AAE7C,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAsC,eAAe,KAAK,kBAAkB;AAC5E;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,W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;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,+GAA+G;AAC1H,WAAW,4JAA4J,GAAG;AAC1K,aAAa,gBAAgB;AAC7B,yBAAyB,6FAA6F;AACtH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ha;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,WAAW,oBAAoB;AAC/B,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;;AAEA;;;;;;;AC1Ia;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA,+BAA+B;;AAE/B;AACA;AACA,cAAc;AACd;AACA,oCAAoC;;AAEpC;AACA;AACA,cAAc;AACd;AACA,2DAA2D;;AAE3D;AACA;AACA,cAAc;AACd;AACA,sCAAsC;;AAEtC;AACA;AACA,cAAc;AACd;AACA,6DAA6D;;AAE7D;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,mBAAmB;AACjC,cAAc,QAAQ;AACtB,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC/Ja;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,eAAe,mBAAO,CAAC,GAAS;AAChC,eAAe,mBAAO,CAAC,GAAQ;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,gBAAgB;AAC3B,aAAa,6BAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,6BAA6B;;AAE7B;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,iCAAiC;AAC/C;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA,iEAAiE,kBAAkB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,uBAAuB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,iBAAiB;AACnD,8BAA8B,yBAAyB;AACvD,WAAW,QAAQ;AACnB,aAAa,wBAAwB;AACrC,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,WAAW;AACxB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,GAAG;AACd,aAAa,WAAW;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,uBAAuB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,MAAM;AACN,wBAAwB,6BAA6B;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,SAAS;AACpB,aAAa,uBAAuB;AACpC;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iBAAiB;AAChD,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB,IAAI,iBAAiB;AACvD,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,uBAAuB;AACxC,qDAAqD,+BAA+B;AACpF,WAAW,iBAAiB;AAC5B,aAAa,SAAS;AACtB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChba;AACb;;AAEA;;AAEA,WAAW,mBAAO,CAAC,GAAQ;;AAE3B,UAAU;;AAEV;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,mBAAmB;AAChC;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,qDAAqD,iBAAiB;AACtE;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClPa;AACb;;AAEA;AACA,uBAAuB,mBAAO,CAAC,GAAU;AACzC;;AAEA,YAAY,mBAAO,CAAC,GAAS;AAC7B,YAAY,mBAAO,CAAC,GAAQ;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,4BAA4B;AACvC,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,mCAAmC;;AAEnC;AACA;AACA,cAAc;AACd;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,mBAAmB;AACjC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,eAAe;AACrD;AACA,UAAU;AACV,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;AC1Ma;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,qBAAqB,GAAG,oBAAoB,sCAAsC;AAC/F,YAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,4BAA4B;AAC5B;AACA,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,KAAK;AACL;;;;;;;;AC1Za;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;;;;;;;AClDa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,EAAQ;AAC9B,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAQ;;AAE9B;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,aAAa;AACb;AACA;;AAEA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe;AAC1B,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,cAAc;AACzB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe,sCAAsC,sBAAsB;AACtF,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,eAAe,sCAAsC,sBAAsB;AACtF,aAAa,MAAM;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAM;;AAEN;AACA,wDAAwD;;AAExD,MAAM;;AAEN;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA,+DAA+D;AAC/D;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;;AAEN;AACA,+CAA+C;;AAE/C,MAAM;;AAEN,wBAAwB,iDAAiD;AACzE;;AAEA;AACA,+CAA+C;;AAE/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Wa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,sBAAsB;AACvD;AACA,UAAU;AACV,WAAW,mCAAmC,YAAY,IAAI;AAC9D,WAAW,YAAY;AACvB,WAAW,iBAAiB;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,mCAAmC,cAAc;AACjD;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,iBAAiB;AAC5B,aAAa;AACb;;AAEA,cAAc,mBAAO,CAAC,GAAe;;;;;;;;ACnCxB;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;;AAEA;AACA,yCAAyC,sCAAsC;AAC/E;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA,UAAU;AACV,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB,aAAa;AACb;;AAEA;AACA,+BAA+B,mBAAmB,eAAe,qBAAqB;AACtF;AACA;AACA;AACA,UAAU;AACV,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa,wBAAwB;AACrC;;AAEA;AACA;AACA,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,mCAAmC,kCAAkC;AACrE,WAAW,qCAAqC;AAChD,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,uBAAuB;AAClC,WAAW,iCAAiC;AAC5C,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAAgC,mCAAmC;AACnE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ia;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,aAAa,mBAAO,CAAC,GAAU;AAC/B,aAAa,mBAAO,CAAC,GAAQ;AAC7B,aAAa,mBAAO,CAAC,GAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,YAAY,WAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,uBAAuB;;AAEvB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,yBAAyB;AACvC;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,aAAa,SAAS;AACtB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA,4BAA4B,gDAAgD;AAC5E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;ACtKa;AACb;;AAEA;AACA,gBAAgB,mBAAO,CAAC,GAAa;AACrC;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,GAAS;AACjC,gBAAgB,mBAAO,CAAC,EAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAU;AAClC,gBAAgB,mBAAO,CAAC,GAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAW;AACnC,gBAAgB,mBAAO,CAAC,GAAY;AACpC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,uBAAuB;;AAEvB;AACA;AACA,cAAc;AACd;AACA,6BAA6B;;AAE7B;AACA;AACA,cAAc;AACd;AACA,iCAAiC;;AAEjC;AACA;AACA,cAAc;AACd;AACA,+BAA+B;;AAE/B;AACA;AACA,cAAc;AACd;AACA,4BAA4B;;AAE5B;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8DAA8D,kBAAkB;AAChF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gGAAgG,eAAe,0GAA0G,cAAc;AACvO;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,+CAA+C;AAClE,gDAAgD;;AAEhD;AACA;AACA,wBAAwB,+CAA+C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA,uBAAuB;AACvB;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC,cAAc,wBAAwB;AACtC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,SAAS;AACvB;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,6BAA6B,uBAAuB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,MAAM;AACnB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,aAAa,MAAM;AACnB,YAAY,WAAW;AACvB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,UAAU,GAAG;AAC1B;AACA;AACA;AACA;;AAEA;AACA,YAAY,yBAAyB,GAAG,0BAA0B,KAAK,yBAAyB;AAChG,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,+CAA+C;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,0BAA0B;AAClF,WAAW,UAAU,qBAAqB;AAC1C,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,iDAAiD;AACjD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O,CAAC,GAAQ;;AAE/B;AACA;AACA,sBAAsB;AACtB,2CAA2C,gCAAgC;AAC3E,qDAAqD,gCAAgC;AACrF;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;;AAE/B;AACA;AACA,6CAA6C,+BAA+B;AAC5E;AACA;;;AAGA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,gEAAgE,mBAAO,CAAC,GAAQ;AAChF;AACA,CAAC;;;;;;;;AChNY;AACb;;AAEA,WAAW,mBAAO,CAAC,GAAiB;;AAEpC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA,6BAA6B;AAC7B,6CAA6C;AAC7C,2BAA2B;;AAE3B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvMa;AACb;;AAEA;AACA,iBAAiB,mBAAO,CAAC,GAAuB;;AAEhD;AACA,cAAc,mBAAO,CAAC,GAAoB;;AAE1C;AACA,oBAAoB,mBAAO,CAAC,GAA0B;;AAEtD;AACA,aAAa,mBAAO,CAAC,GAAmB;;AAExC;AACA,eAAe,mBAAO,CAAC,GAAqB;;AAE5C;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,YAAY,mBAAO,CAAC,GAAkB;;AAEtC;AACA,gBAAgB,mBAAO,CAAC,GAAY;;AAEpC;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;AAC5B,sBAAsB,qBAAM;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA,6BAA6B,qBAAM;AACnC;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,qFAAqF;;AAErF;AACA;AACA,UAAU;AACV;AACA;AACA,mDAAmD,mCAAmC;;AAEtF;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,kCAAkC,EAAE;;AAEpC;AACA;AACA,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,aAAa,mBAAmB;AAChC;AACA,qCAAqC;AACrC,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,oBAAoB;AACjC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,iDAAiD,kBAAkB,mBAAmB;;AAEtF;AACA;AACA;AACA;AACA,mDAAmD,gCAAgC;;AAEnF;AACA;AACA;;AAEA;;AAEA,2DAA2D,kBAAkB,gBAAgB;;AAE7F;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B;AACA;AACA,qCAAqC;AACrC,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,aAAa,kBAAkB;AAC/B;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,aAAa;AAC1B;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,wBAAwB;AACxB,gEAAgE,QAAQ;AACxE;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,uBAAuB;AACzD;AACA,UAAU;AACV,WAAW,kBAAkB;AAC7B,aAAa;AACb;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,aAAa,aAAa;AAC1B;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpaa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,EAAQ;AAChC,gBAAgB,mBAAO,CAAC,GAAQ;;AAEhC;AACA,kIAAkI,oBAAoB;AACtJ;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yBAAyB;AACzB;AACA;AACA,2EAA2E,iBAAiB;AAC5F;AACA;AACA;AACA,eAAe;AACf,UAAU;AACV;AACA,eAAe;AACf,6CAA6C;AAC7C;AACA;AACA,eAAe;AACf;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,oBAAoB,gDAAgD;AACpE;AACA;;AAEA;AACA,6CAA6C,qBAAqB;;AAElE;AACA,yBAAyB;AACzB;AACA;AACA;AACA,0BAA0B,WAAW,KAAK;AAC1C;AACA;AACA,eAAe;;AAEf;AACA,UAAU,2BAA2B;AACrC;AACA;AACA,0BAA0B,YAAY,KAAK;AAC3C;AACA,eAAe;;AAEf;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;;;;;;AChLa;;AAEb;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,GAAW;;AAEjC;AACA,qCAAqC,eAAe;AACpD;AACA,UAAU;AACV,WAAW,mBAAmB;AAC9B,aAAa,UAAU,GAAG;AAC1B;AACA;;AAEA;AACA,mCAAmC,eAAe;AAClD;AACA,UAAU;AACV,WAAW,UAAU,GAAG;AACxB,WAAW,oBAAoB;AAC/B,aAAa,mBAAmB;AAChC;AACA;;AAEA;AACA,gCAAgC,eAAe;AAC/C;AACA,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACrGa;AACb;;AAEA,gBAAgB,mBAAO,CAAC,GAAgB;;AAExC,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,GAAG;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,oBAAoB;AACpB;;AAEA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB,GAAG,oBAAoB,yCAAyC;AAClG;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,YAAY;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,aAAa,QAAQ;AACrB,YAAY,WAAW;AACvB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,0BAA0B,IAAI,4BAA4B;AACtE,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AChda;AACb;;AAEA;AACA,aAAa,mBAAO,CAAC,GAAU;AAC/B;;AAEA,WAAW,mBAAO,CAAC,GAAgB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;;;;;;;;;;;;;;UCpFA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;UEPD;UACA;UACA;UACA","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/before-startup","webpack://Centrifuge/webpack/startup","webpack://Centrifuge/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUBSCRIBE) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUBSCRIBE) {\n const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import { Centrifuge } from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUBSCRIBE: proto.lookupEnum('PushType').values.UNSUBSCRIBE,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUBSCRIBE: proto.lookupEnum('PushType').values.SUBSCRIBE\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUBSCRIBE: proto.lookupType('protocol.Unsubscribe'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUBSCRIBE: proto.lookupType('protocol.Subscribe')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUBSCRIBE:\n type = PushSchema.UNSUBSCRIBE;\n break;\n case protobufPushType.SUBSCRIBE:\n type = PushSchema.SUBSCRIBE;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(714);\n",""],"names":["_errorTimeout","_errorConnectionClosed","Centrifuge","url","options","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","Promise","resolve","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","params","callback","query","_debug","JSON","stringify","xhr","global","XMLHttpRequest","ActiveXObject","i","hasOwnProperty","length","encodeURIComponent","open","withCredentials","setRequestHeader","headerName","onreadystatechange","readyState","status","parsed","parse","responseText","e","error","_log","setTimeout","send","arguments","WebSocket","format","_formatOverride","Error","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","isProtobufURL","indexOf","_setFormat","SockJS","newStatus","interval","xhrID","abort","reconnect","_stopPing","id","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","offset","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","err","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","reject","sent","_transportSend","undefined","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","p","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","emit","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","Math","round","random","max","REFRESH","_refreshResponse","_refreshError","context","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","_setNew","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","ctx","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","join","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","push","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","_handleUnsub","_handleSub","messages","slice","PING","_pingResponse","lastSeq","lastOffset","lastGen","lastEpoch","errObject","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","EventEmitter","CentrifugeProtobuf","map","c","split","filter","r","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","Object","assign","encode","finish","encodeDelimited","ProtobufDecoder","reader","Reader","Uint8Array","pos","len","decodeDelimited","_decode","res","decode","_STATE_NEW","_STATE_SUBSCRIBING","_STATE_SUCCESS","_STATE_ERROR","_STATE_UNSUBSCRIBED","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","on","errContext","_resolve","value","_reject","enabled","prototype","toString","call","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","subPromise","rej","_nextPromiseId","self","publish","presenceStats","history","startsWith","prefix","lastIndexOf","isFunction","log","level","args","console","logger","apply","backoff","step","pow","floor","errorExists","extend","a","b","key"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/centrifuge.protobuf.min.js b/dist/centrifuge.protobuf.min.js index 87afe1d3..a29026a4 100644 --- a/dist/centrifuge.protobuf.min.js +++ b/dist/centrifuge.protobuf.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var __webpack_modules__={537:function(e){e.exports=function(e,t){for(var r=new Array(arguments.length-1),n=0,i=2,s=!0;i1&&"="===e.charAt(t);)++r;return Math.ceil(3*e.length)/4-r};for(var n=new Array(64),i=new Array(123),s=0;s<64;)i[n[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;r.encode=function(e,t,r){for(var i,s=null,o=[],u=0,a=0;t>2],i=(3&c)<<4,a=1;break;case 1:o[u++]=n[i|c>>4],i=(15&c)<<2,a=2;break;case 2:o[u++]=n[i|c>>6],o[u++]=n[63&c],a=0}u>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,o)),u=0)}return a&&(o[u++]=n[i],o[u++]=61,1===a&&(o[u++]=61)),s?(u&&s.push(String.fromCharCode.apply(String,o.slice(0,u))),s.join("")):String.fromCharCode.apply(String,o.slice(0,u))};var o="invalid encoding";r.decode=function(e,t,r){for(var n,s=r,u=0,a=0;a1)break;if(void 0===(c=i[c]))throw Error(o);switch(u){case 0:n=c,u=1;break;case 1:t[r++]=n<<2|(48&c)>>4,n=c,u=2;break;case 2:t[r++]=(15&n)<<4|(60&c)>>2,n=c,u=3;break;case 3:t[r++]=(3&n)<<6|c,u=0}}if(1===u)throw Error(o);return r-s},r.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},124:function(e){function t(e,r){"string"==typeof e&&(r=e,e=void 0);var n=[];function i(e){if("string"!=typeof e){var r=s();if(t.verbose&&console.log("codegen: "+r),r="return "+r,e){for(var o=Object.keys(e),u=new Array(o.length+1),a=new Array(o.length),c=0;c0?0:2147483648,r,n);else if(isNaN(t))e(2143289344,r,n);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,r,n);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,r,n);else{var s=Math.floor(Math.log(t)/Math.LN2);e((i<<31|s+127<<23|8388607&Math.round(t*Math.pow(2,-s)*8388608))>>>0,r,n)}}function o(e,t,r){var n=e(t,r),i=2*(n>>31)+1,s=n>>>23&255,o=8388607&n;return 255===s?o?NaN:i*(1/0):0===s?1401298464324817e-60*i*o:i*Math.pow(2,s-150)*(o+8388608)}e.writeFloatLE=t.bind(null,r),e.writeFloatBE=t.bind(null,n),e.readFloatLE=o.bind(null,i),e.readFloatBE=o.bind(null,s)}(),"undefined"!=typeof Float64Array?function(){var t=new Float64Array([-0]),r=new Uint8Array(t.buffer),n=128===r[7];function i(e,n,i){t[0]=e,n[i]=r[0],n[i+1]=r[1],n[i+2]=r[2],n[i+3]=r[3],n[i+4]=r[4],n[i+5]=r[5],n[i+6]=r[6],n[i+7]=r[7]}function s(e,n,i){t[0]=e,n[i]=r[7],n[i+1]=r[6],n[i+2]=r[5],n[i+3]=r[4],n[i+4]=r[3],n[i+5]=r[2],n[i+6]=r[1],n[i+7]=r[0]}function o(e,n){return r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],r[3]=e[n+3],r[4]=e[n+4],r[5]=e[n+5],r[6]=e[n+6],r[7]=e[n+7],t[0]}function u(e,n){return r[7]=e[n],r[6]=e[n+1],r[5]=e[n+2],r[4]=e[n+3],r[3]=e[n+4],r[2]=e[n+5],r[1]=e[n+6],r[0]=e[n+7],t[0]}e.writeDoubleLE=n?i:s,e.writeDoubleBE=n?s:i,e.readDoubleLE=n?o:u,e.readDoubleBE=n?u:o}():function(){function t(e,t,r,n,i,s){var o=n<0?1:0;if(o&&(n=-n),0===n)e(0,i,s+t),e(1/n>0?0:2147483648,i,s+r);else if(isNaN(n))e(0,i,s+t),e(2146959360,i,s+r);else if(n>17976931348623157e292)e(0,i,s+t),e((o<<31|2146435072)>>>0,i,s+r);else{var u;if(n<22250738585072014e-324)e((u=n/5e-324)>>>0,i,s+t),e((o<<31|u/4294967296)>>>0,i,s+r);else{var a=Math.floor(Math.log(n)/Math.LN2);1024===a&&(a=1023),e(4503599627370496*(u=n*Math.pow(2,-a))>>>0,i,s+t),e((o<<31|a+1023<<20|1048576*u&1048575)>>>0,i,s+r)}}}function o(e,t,r,n,i){var s=e(n,i+t),o=e(n,i+r),u=2*(o>>31)+1,a=o>>>20&2047,c=4294967296*(1048575&o)+s;return 2047===a?c?NaN:u*(1/0):0===a?5e-324*u*c:u*Math.pow(2,a-1075)*(c+4503599627370496)}e.writeDoubleLE=t.bind(null,r,0,4),e.writeDoubleBE=t.bind(null,n,4,0),e.readDoubleLE=o.bind(null,i,0,4),e.readDoubleBE=o.bind(null,s,4,0)}(),e}function r(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function n(e,t,r){t[r]=e>>>24,t[r+1]=e>>>16&255,t[r+2]=e>>>8&255,t[r+3]=255&e}function i(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function s(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t)},199:function(module){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},626:function(e,t){var r=t,n=r.isAbsolute=function(e){return/^(?:\/|\w+:)/.test(e)},i=r.normalize=function(e){var t=(e=e.replace(/\\/g,"/").replace(/\/{2,}/g,"/")).split("/"),r=n(e),i="";r&&(i=t.shift()+"/");for(var s=0;s0&&".."!==t[s-1]?t.splice(--s,2):r?t.splice(s,1):++s:"."===t[s]?t.splice(s,1):++s;return i+t.join("/")};r.resolve=function(e,t,r){return r||(t=i(t)),n(t)?t:(r||(e=i(e)),(e=e.replace(/(?:\/|^)[^/]+$/,"")).length?i(e+"/"+t):t)}},662:function(e){e.exports=function(e,t,r){var n=r||8192,i=n>>>1,s=null,o=n;return function(r){if(r<1||r>i)return e(r);o+r>n&&(s=e(n),o=0);var u=t.call(s,o,o+=r);return 7&o&&(o=1+(7|o)),u}}},997:function(e,t){var r=t;r.length=function(e){for(var t=0,r=0,n=0;n191&&n<224?s[o++]=(31&n)<<6|63&e[t++]:n>239&&n<365?(n=((7&n)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,s[o++]=55296+(n>>10),s[o++]=56320+(1023&n)):s[o++]=(15&n)<<12|(63&e[t++])<<6|63&e[t++],o>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i?(o&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))},r.write=function(e,t,r){for(var n,i,s=r,o=0;o>6|192,t[r++]=63&n|128):55296==(64512&n)&&56320==(64512&(i=e.charCodeAt(o+1)))?(n=65536+((1023&n)<<10)+(1023&i),++o,t[r++]=n>>18|240,t[r++]=n>>12&63|128,t[r++]=n>>6&63|128,t[r++]=63&n|128):(t[r++]=n>>12|224,t[r++]=n>>6&63|128,t[r++]=63&n|128);return r-s}},382:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var n=u(r(187)),i=u(r(471)),s=r(147),o=r(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var r=0;r0&&(a+="&"),a+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var l in a.length>0&&(a="?"+a),o.open("POST",e+a,!0),"withCredentials"in o&&(o.withCredentials=!this._config.disableWithCredentials),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.setRequestHeader("Content-Type","application/json"),n)n.hasOwnProperty(l)&&o.setRequestHeader(l,n[l]);return o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e,t=!1;try{e=JSON.parse(o.responseText),t=!0}catch(e){s({error:"Invalid JSON. Data was: "+o.responseText,status:200,data:null})}t&&s({data:e,status:200})}else u._log("wrong status code in AJAX response",o.status),s({status:o.status,data:null})},setTimeout((function(){return o.send(JSON.stringify(i))}),20),o}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=s.JsonMethodType,this._pushType=s.JsonPushType,this._encoder=new s.JsonEncoder,this._decoder=new s.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in r.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1||"protobuf"===this._config.protocol)this._setFormat("protobuf"),this._protocol="protobuf";else{if(""!==this._config.protocol&&"json"!==this._config.protocol)throw new Error("unsupported protocol "+this._config.protocol);this._setFormat("json")}if((0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===r.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=r.g.SockJS}else this._debug("client will connect to websocket endpoint");this._xmlhttprequest=this._config.xmlhttprequest}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var r=this._callbacks[t];clearTimeout(r.timeout);var n=r.errback;if(!n)continue;n({error:this._createErrorObject("disconnected")})}for(var i in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];e?(s._isSuccess()&&(s._triggerUnsubscribe(),s._recover=!0),s._shouldResubscribe()&&s._setSubscribing()):s._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var r=t.id;if(r in this._callbacks){var n=this._callbacks[r];clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,n.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_getSubProtocol",value:function(){return this._protocol?"centrifuge-"+this._protocol:""}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),null!==this._config.sockjsTimeout&&(t.timeout=this._config.sockjsTimeout),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket;var r=this._getSubProtocol();this._transport=""!==r?new this._websocket(this._url,r):new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var r={},n=!1;for(var i in e._serverSubs)if(e._serverSubs.hasOwnProperty(i)&&e._serverSubs[i].recoverable){n=!0;var s={recover:!0};e._serverSubs[i].seq||e._serverSubs[i].gen?(e._serverSubs[i].seq&&(s.seq=e._serverSubs[i].seq),e._serverSubs[i].gen&&(s.gen=e._serverSubs[i].gen)):e._serverSubs[i].offset&&(s.offset=e._serverSubs[i].offset),e._serverSubs[i].epoch&&(s.epoch=e._serverSubs[i].epoch),r[i]=s}n&&(t.params||(t.params={}),t.params.subs=r),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),n),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var r=d,n=!0;if(t&&"reason"in t&&t.reason)try{var i=JSON.parse(t.reason);e._debug("reason is an advice object",i),r=i.reason,n=i.reconnect}catch(n){r=t.reason,e._debug("reason is a plain string",r)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:r,reconnect:n}),e._disconnect(r,n),!0===e._reconnect){e._reconnecting=!0;var s=e._getRetryInterval();e._debug("reconnect after "+s+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),s)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var r={data:t};""!==e&&(r.method=e);var n={method:this._methodType.RPC,params:r};return this._methodCall(n,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var r={channel:e};return void 0!==t&&(t.since&&(r.since={offset:t.since.offset},t.since.epoch&&(r.since.epoch=t.since.epoch)),void 0!==t.limit&&(r.limit=t.limit),!0===t.reverse&&(r.reverse=!0)),r}},{key:"_methodCall",value:function(e,t){var r=this;return this.isConnected()?new Promise((function(n,i){r._call(e).then((function(i){n(t(r._decoder.decodeCommandResult(e.method,i.result))),i.next&&i.next()}),(function(e){i(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var r={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(r,(function(){return{}}))}},{key:"history",value:function(e,t){var r=this._getHistoryParams(e,t),n={method:this._methodType.HISTORY,params:r};return this._methodCall(n,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,r=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(r,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var r=this,n=Promise.resolve(),i=function(t){e.hasOwnProperty(t)&&(n=n.then((function(){return r._dispatchReply(e[t])})))};for(var s in e)i(s);n=n.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,r=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),r;var n=e.id;return n&&n>0?this._handleReply(e,t):this._handlePush(e.result,t),r}},{key:"_call",value:function(e){var t=this;return new Promise((function(r,n){var i=t._addMessage(e);t._registerCall(i,r,n)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var r=t||!1;if(!1===r&&(this._reconnect=!1),this._isDisconnected())r||this._clearConnectedState(r);else{if(this._clearConnectedState(r),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var n in this._serverSubs)this._serverSubs.hasOwnProperty(n)&&this.emit("unsubscribe",{channel:n});this.emit("disconnect",{reason:e,reconnect:r})}!1===r&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,r=this._newXHRID(),n=function(n){if(r in e._xhrs&&delete e._xhrs[r],e._clientID===t)if(n.error||200!==n.status){if(n.error?e._debug("error refreshing connection token",n.error):e._debug("error refreshing connection token: wrong status code",n.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var i=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),s=e._config.refreshInterval+i;e._refreshTimeout=setTimeout((function(){return e._refresh()}),s)}else if(e._numRefreshFailed=0,e._token=n.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},n);else{var i=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,n);this._xhrs[r]=i}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var r=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),r)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var r=this._clientID,n=this._newXHRID(),i=function(i){if(n in t._xhrs&&delete t._xhrs[n],!i.error&&200===i.status&&t._clientID===r){var s={};if(i.data.channels)for(var o in i.data.channels){var u=i.data.channels[o];u.channel&&(s[u.channel]=u.token)}var a=s[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(r){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,r.result)),r.next&&r.next()}),(function(r){t._subRefreshError(e,r.error),r.next&&r.next()}))}}},s={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:s},i);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,s,i);this._xhrs[n]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var r=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var n=Math.round(1e3*Math.random()),i=setTimeout((function(){return r._subRefresh(e)}),this._config.subRefreshInterval+n);this._subRefreshTimeouts[e]=i}}},{key:"_subRefreshResponse",value:function(e,t){var r=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var n=setTimeout((function(){return r._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=n}}},{key:"_subscribe",value:function(e,t){var r=this;this._debug("subscribing on",e.channel);var n=e.channel;if(n in this._subs||(this._subs[n]=e),this.isConnected()){e._setSubscribing(t);var i={method:this._methodType.SUBSCRIBE,params:{channel:n}};if((0,o.startsWith)(n,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[n]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var s=e._needRecover();if(!0===s){i.params.recover=!0;var u=this._getLastSeq(n),a=this._getLastGen(n);if(u||a)u&&(i.params.seq=u),a&&(i.params.gen=a);else{var c=this._getLastOffset(n);c&&(i.params.offset=c)}var l=this._getLastEpoch(n);l&&(i.params.epoch=l)}this._call(i).then((function(e){r._subscribeResponse(n,s,r._decoder.decodeCommandResult(r._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){r._subscribeError(n,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var r=this,n=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var i in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return r._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];s._shouldResubscribe()&&this._subscribe(s,n)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var r=e[t],n={channel:t,isResubscribe:void 0!==this._serverSubs[t]};n=this._expandSubscribeContext(n,r),this.emit("subscribe",n)}for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];if(s.recovered){var o=s.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(i,o[u])}this._serverSubs[i]={seq:s.seq,gen:s.gen,offset:s.offset,epoch:s.epoch,recoverable:s.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var r=this._getSub(e);r&&r._isSubscribing()&&(0!==t.code||t.message!==p?r._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var r=!1;"recovered"in t&&(r=t.recovered),e.recovered=r;var n=!1;"positioned"in t&&(n=t.positioned);var i="";"epoch"in t&&(i=t.epoch);var s=0;return"offset"in t&&(s=t.offset),n&&(e.streamPosition={offset:s,epoch:i}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,r){var n=this,i=this._getSub(e);if(i&&i._isSubscribing()){i._setSubscribeSuccess(r);var s=r.publications;if(s&&s.length>0)for(var o in s.length>=2&&!s[0].offset&&!s[1].offset&&(s=s.reverse()),s)s.hasOwnProperty(o)&&this._handlePublication(e,s[o]);if(!r.recoverable||t&&r.recovered||(this._lastSeq[e]=r.seq||0,this._lastGen[e]=r.gen||0,this._lastOffset[e]=r.offset||0),this._lastEpoch[e]=r.epoch||"",r.recoverable&&(i._recoverable=!0),!0===r.expires){var u=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(r.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var r=e.id,n=e.result;if(r in this._callbacks){var i=this._callbacks[r];if(clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,o.errorExists)(e)){var s=i.errback;if(!s)return void t();s({error:e.error,next:t})}else{var u=i.callback;if(!u)return;u({result:n,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("join",r):this._isServerSub(e)&&(r.channel=e,this.emit("join",r))}},{key:"_handleLeave",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("leave",r):this._isServerSub(e)&&(r.channel=e,this.emit("leave",r))}},{key:"_handleUnsub",value:function(e,t){var r={},n=this._getSub(e);n?(n.unsubscribe(),!0===t.resubscribe&&n.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],r.channel=e,this.emit("unsubscribe",r))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var r={channel:e,isResubscribe:!1};r=this._expandSubscribeContext(r,t),this.emit("subscribe",r)}},{key:"_handlePublication",value:function(e,t){var r=this._getSub(e),n={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(n.info=t.info),r?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),r.emit("publish",n)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),n.channel=e,this.emit("publish",n))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var r=this._decoder.decodePush(e),n=0;"type"in r&&(n=r.type);var i=r.channel;if(n===this._pushType.PUBLICATION){var s=this._decoder.decodePushData(this._pushType.PUBLICATION,r.data);this._handlePublication(i,s)}else if(n===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,r.data);this._handleMessage(o)}else if(n===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,r.data);this._handleJoin(i,u)}else if(n===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,r.data);this._handleLeave(i,a)}else if(n===this._pushType.UNSUB){var c=this._decoder.decodePushData(this._pushType.UNSUB,r.data);this._handleUnsub(i,c)}else if(n===this._pushType.SUB){var l=this._decoder.decodePushData(this._pushType.SUB,r.data);this._handleSub(i,l)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,r){var n=this;this._callbacks[e]={callback:t,errback:r,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete n._callbacks[e],(0,o.isFunction)(r)&&r({error:n._createErrorObject(p)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var r=[];for(var n in t)if(t.hasOwnProperty(n)){if(!this._getSub(n))continue;r.push(n)}if(0!==r.length){var i={client:this._clientID,channels:r},s=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===s)if(t.error||200!==t.status){for(var n in e._debug("authorization request failed"),r)if(r.hasOwnProperty(n)){var i=r[n];e._subscribeError(i,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var l=!1;for(var f in e._isBatching||(e.startBatching(),l=!0),r)!r.hasOwnProperty(f)||function(){var t=r[f],n=u[t];if(!n)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var i={method:e._methodType.SUBSCRIBE,params:{channel:t,token:n}},s=e._getSub(t);if(null===s)return"continue";var o=s._needRecover();if(!0===o){i.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(i.params.seq=a),c&&(i.params.gen=c);else{var l=e._getLastOffset(t);l&&(i.params.offset=l)}var h=e._getLastEpoch(t);h&&(i.params.epoch=h)}e._call(i).then((function(r){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,r.result)),r.next&&r.next()}),(function(r){e._subscribeError(t,r.error),r.next&&r.next()}))}();l&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"_setSubscribeSince",value:function(e,t){this._lastOffset[e.channel]=t.offset,this._lastEpoch[e.channel]=t.epoch,e._setNeedRecover(!0)}},{key:"subscribe",value:function(e,t,r){var n=this._getSub(e);if(null!==n)return n._setEvents(t),n._isUnsubscribed()&&n.subscribe(),n;var s=new i.default(this,e,t);return this._subs[e]=s,r&&r.since&&this._setSubscribeSince(s,r.since),s.subscribe(),s}}])&&c(t.prototype,n),_}(n.default);t.Centrifuge=y},714:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(885).CentrifugeProtobuf;t.default=n,e.exports=t.default},147:function(e,t){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,c=l,console&&console.warn&&console.warn(c)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=l.bind(n);return i.listener=r,n.wrapFn=i,i}function h(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=s[e];if(void 0===a)return!1;if("function"==typeof a)n(a,this,t);else{var c=a.length,l=d(a,c);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){o=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},492:function(e,t,r){e.exports=r(836)},996:function(e,t,r){var n=t,i=r(25),s=r(935);function o(e,t,r,n){if(t.resolvedType)if(t.resolvedType instanceof i){e("switch(d%s){",n);for(var s=t.resolvedType.values,o=Object.keys(s),u=0;u>>0",n,n);break;case"int32":case"sint32":case"sfixed32":e("m%s=d%s|0",n,n);break;case"uint64":a=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",n,n,a)('else if(typeof d%s==="string")',n)("m%s=parseInt(d%s,10)",n,n)('else if(typeof d%s==="number")',n)("m%s=d%s",n,n)('else if(typeof d%s==="object")',n)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",n,n,n,a?"true":"");break;case"bytes":e('if(typeof d%s==="string")',n)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",n,n,n)("else if(d%s.length)",n)("m%s=d%s",n,n);break;case"string":e("m%s=String(d%s)",n,n);break;case"bool":e("m%s=Boolean(d%s)",n,n)}}return e}function u(e,t,r,n){if(t.resolvedType)t.resolvedType instanceof i?e("d%s=o.enums===String?types[%i].values[m%s]:m%s",n,r,n,n):e("d%s=types[%i].toObject(m%s,o)",n,r,n);else{var s=!1;switch(t.type){case"double":case"float":e("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",n,n,n,n);break;case"uint64":s=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e('if(typeof m%s==="number")',n)("d%s=o.longs===String?String(m%s):m%s",n,n,n)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",n,n,n,n,s?"true":"",n);break;case"bytes":e("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",n,n,n,n,n);break;default:e("d%s=m%s",n,n)}}return e}n.fromObject=function(e){var t=e.fieldsArray,r=s.codegen(["d"],e.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!t.length)return r("return new this.ctor");r("var m=new this.ctor");for(var n=0;n>>3){");for(var r=0;r>>3){")("case 1: k=r.%s(); break",u.keyType)("case 2:"),void 0===i.basic[a]?t("value=types[%i].decode(r,r.uint32())",r):t("value=r.%s()",a),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),void 0!==i.long[u.keyType]?t('%s[typeof k==="object"?util.longToHash(k):k]=value',c):t("%s[k]=value",c)):u.repeated?(t("if(!(%s&&%s.length))",c,c)("%s=[]",c),void 0!==i.packed[a]&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0,8|i.mapKey[c.keyType],c.keyType),void 0===h?r("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",l,t):r(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,f,t),r("}")("}")):c.repeated?(r("if(%s!=null&&%s.length){",t,t),c.packed&&void 0!==i.packed[f]?r("w.uint32(%i).fork()",(c.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",t)("w.%s(%s[i])",f,t)("w.ldelim()"):(r("for(var i=0;i<%s.length;++i)",t),void 0===h?o(r,c,l,t+"[i]"):r("w.uint32(%i).%s(%s[i])",(c.id<<3|h)>>>0,f,t)),r("}")):(c.optional&&r("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",t,c.name),void 0===h?o(r,c,l,t):r("w.uint32(%i).%s(%s)",(c.id<<3|h)>>>0,f,t))}return r("return w")};var n=r(25),i=r(63),s=r(935);function o(e,t,r,n){return t.resolvedType.group?e("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",r,n,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):e("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",r,n,(t.id<<3|2)>>>0)}},25:function(e,t,r){e.exports=o;var n=r(243);((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var i=r(313),s=r(935);function o(e,t,r,i,s){if(n.call(this,e,r),t&&"object"!=typeof t)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=s||{},this.reserved=void 0,t)for(var o=Object.keys(t),u=0;ut)return!0;return!1},l.isReservedName=function(e,t){if(e)for(var r=0;r0;){var n=e.shift();if(r.nested&&r.nested[n]){if(!((r=r.nested[n])instanceof l))throw Error("path conflicts with non-namespace objects")}else r.add(r=new l(n))}return t&&r.addJSON(t),r},l.prototype.resolveAll=function(){for(var e=this.nestedArray,t=0;t-1)return n}else if(n instanceof l&&(n=n.lookup(e.slice(1),t,!0)))return n}else for(var i=0;i-1&&this.oneof.splice(t,1),e.partOf=null,this},o.prototype.onAdd=function(e){n.prototype.onAdd.call(this,e);for(var t=0;t "+e.len)}function a(e){this.buf=e,this.pos=0,this.len=e.length}var c,l="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new a(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new a(e);throw Error("illegal buffer")},f=function(){return i.Buffer?function(e){return(a.create=function(e){return i.Buffer.isBuffer(e)?new n(e):l(e)})(e)}:l};function h(){var e=new s(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw u(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw u(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function p(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw u(this,8);return new s(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}a.create=f(),a.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,a.prototype.uint32=(c=4294967295,function(){if(c=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return c;if((this.pos+=5)>this.len)throw this.pos=this.len,u(this,10);return c}),a.prototype.int32=function(){return 0|this.uint32()},a.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},a.prototype.bool=function(){return 0!==this.uint32()},a.prototype.fixed32=function(){if(this.pos+4>this.len)throw u(this,4);return p(this.buf,this.pos+=4)},a.prototype.sfixed32=function(){if(this.pos+4>this.len)throw u(this,4);return 0|p(this.buf,this.pos+=4)},a.prototype.float=function(){if(this.pos+4>this.len)throw u(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},a.prototype.double=function(){if(this.pos+8>this.len)throw u(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},a.prototype.bytes=function(){var e=this.uint32(),t=this.pos,r=this.pos+e;if(r>this.len)throw u(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,r):t===r?new this.buf.constructor(0):this._slice.call(this.buf,t,r)},a.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},a.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw u(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw u(this)}while(128&this.buf[this.pos++]);return this},a.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},a._configure=function(e){n=e,a.create=f(),n._configure();var t=i.Long?"toLong":"toNumber";i.merge(a.prototype,{int64:function(){return h.call(this)[t](!1)},uint64:function(){return h.call(this)[t](!0)},sint64:function(){return h.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},593:function(e,t,r){e.exports=s;var n=r(408);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(e){n.call(this,e)}s._configure=function(){i.Buffer&&(s.prototype._slice=i.Buffer.prototype.slice)},s.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+e,this.len))},s._configure()},424:function(e,t,r){e.exports=f;var n=r(313);((f.prototype=Object.create(n.prototype)).constructor=f).className="Root";var i,s,o,u=r(548),a=r(25),c=r(598),l=r(935);function f(e){n.call(this,"",e),this.deferred=[],this.files=[]}function h(){}f.fromJSON=function(e,t){return t||(t=new f),e.options&&t.setOptions(e.options),t.addJSON(e.nested)},f.prototype.resolvePath=l.path.resolve,f.prototype.fetch=l.fetch,f.prototype.load=function e(t,r,n){"function"==typeof r&&(n=r,r=void 0);var i=this;if(!n)return l.asPromise(e,i,t,r);var u=n===h;function a(e,t){if(n){var r=n;if(n=null,u)throw e;r(e,t)}}function c(e){var t=e.lastIndexOf("google/protobuf/");if(t>-1){var r=e.substring(t);if(r in o)return r}return null}function f(e,t){try{if(l.isString(t)&&"{"===t.charAt(0)&&(t=JSON.parse(t)),l.isString(t)){s.filename=e;var n,o=s(t,i,r),f=0;if(o.imports)for(;f-1))if(i.files.push(e),e in o)u?f(e,o[e]):(++d,setTimeout((function(){--d,f(e,o[e])})));else if(u){var r;try{r=l.fs.readFileSync(e).toString("utf8")}catch(e){return void(t||a(e))}f(e,r)}else++d,i.fetch(e,(function(r,s){--d,n&&(r?t?d||a(null,i):a(r):f(e,s))}))}var d=0;l.isString(t)&&(t=[t]);for(var y,v=0;v-1&&this.deferred.splice(t,1)}}else if(e instanceof a)p.test(e.name)&&delete e.parent[e.name];else if(e instanceof n){for(var r=0;r0)t[i]=e(t[i]||{},r,n);else{var s=t[i];s&&(n=[].concat(s).concat(n)),t[i]=n}return t}(e,t=t.split("."),r)},Object.defineProperty(s,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(r(424)))}})},630:function(e,t,r){e.exports=i;var n=r(693);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var s=i.zero=new i(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var o=i.zeroHash="\0\0\0\0\0\0\0\0";i.fromNumber=function(e){if(0===e)return s;var t=e<0;t&&(e=-e);var r=e>>>0,n=(e-r)/4294967296>>>0;return t&&(n=~n>>>0,r=~r>>>0,++r>4294967295&&(r=0,++n>4294967295&&(n=0))),new i(r,n)},i.from=function(e){if("number"==typeof e)return i.fromNumber(e);if(n.isString(e)){if(!n.Long)return i.fromNumber(parseInt(e,10));e=n.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):s},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,r=~this.hi>>>0;return t||(r=r+1>>>0),-(t+4294967296*r)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return n.Long?new n.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var u=String.prototype.charCodeAt;i.fromHash=function(e){return e===o?s:new i((u.call(e,0)|u.call(e,1)<<8|u.call(e,2)<<16|u.call(e,3)<<24)>>>0,(u.call(e,4)|u.call(e,5)<<8|u.call(e,6)<<16|u.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return 0===r?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:r<128?9:10}},693:function(e,t,r){var n=t;function i(e,t,r){for(var n=Object.keys(t),i=0;i0)},n.Buffer=function(){try{var e=n.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(e){return"number"==typeof e?n.Buffer?n._Buffer_allocUnsafe(e):new n.Array(e):n.Buffer?n._Buffer_from(e):"undefined"==typeof Uint8Array?e:new Uint8Array(e)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(e){return e?n.LongBits.from(e).toHash():n.LongBits.zeroHash},n.longFromHash=function(e,t){var r=n.LongBits.fromHash(e);return n.Long?n.Long.fromBits(r.lo,r.hi,t):r.toNumber(Boolean(t))},n.merge=i,n.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},n.newError=s,n.ProtocolError=s("ProtocolError"),n.oneOfGetter=function(e){for(var t={},r=0;r-1;--r)if(1===t[e[r]]&&void 0!==this[e[r]]&&null!==this[e[r]])return e[r]}},n.oneOfSetter=function(e){return function(t){for(var r=0;r>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=127&e.lo|128,e.lo=e.lo>>>7;t[r++]=e.lo}function v(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}f.create=h(),f.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(f.alloc=i.pool(f.alloc,i.Array.prototype.subarray)),f.prototype._push=function(e,t,r){return this.tail=this.tail.next=new a(e,t,r),this.len+=t,this},d.prototype=Object.create(a.prototype),d.prototype.fn=function(e,t,r){for(;e>127;)t[r++]=127&e|128,e>>>=7;t[r]=e},f.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new d((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},f.prototype.int32=function(e){return e<0?this._push(y,10,s.fromNumber(e)):this.uint32(e)},f.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},f.prototype.uint64=function(e){var t=s.from(e);return this._push(y,t.length(),t)},f.prototype.int64=f.prototype.uint64,f.prototype.sint64=function(e){var t=s.from(e).zzEncode();return this._push(y,t.length(),t)},f.prototype.bool=function(e){return this._push(p,1,e?1:0)},f.prototype.fixed32=function(e){return this._push(v,4,e>>>0)},f.prototype.sfixed32=f.prototype.fixed32,f.prototype.fixed64=function(e){var t=s.from(e);return this._push(v,4,t.lo)._push(v,4,t.hi)},f.prototype.sfixed64=f.prototype.fixed64,f.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},f.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var _=i.Array.prototype.set?function(e,t,r){t.set(e,r)}:function(e,t,r){for(var n=0;n>>0;if(!t)return this._push(p,1,0);if(i.isString(e)){var r=f.alloc(t=o.length(e));o.decode(e,r,0),e=r}return this.uint32(t)._push(_,t,e)},f.prototype.string=function(e){var t=u.length(e);return t?this.uint32(t)._push(u.write,t,e):this._push(p,1,0)},f.prototype.fork=function(){return this.states=new l(this),this.head=this.tail=new a(c,0,0),this.len=0,this},f.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new a(c,0,0),this.len=0),this},f.prototype.ldelim=function(){var e=this.head,t=this.tail,r=this.len;return this.reset().uint32(r),r&&(this.tail.next=e.next,this.tail=t,this.len+=r),this},f.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),r=0;e;)e.fn(e.val,t,r),r+=e.len,e=e.next;return t},f._configure=function(e){n=e,f.create=h(),n._configure()}},155:function(e,t,r){e.exports=s;var n=r(173);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(){n.call(this)}function o(e,t,r){e.length<40?i.utf8.write(e,t,r):t.utf8Write?t.utf8Write(e,r):t.write(e,r)}s._configure=function(){s.alloc=i._Buffer_allocUnsafe,s.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&"set"===i.Buffer.prototype.set.name?function(e,t,r){t.set(e,r)}:function(e,t,r){if(e.copy)e.copy(t,r,0,e.length);else for(var n=0;n>>0;return this.uint32(t),t&&this._push(s.writeBytesBuffer,t,e),this},s.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(o,t,e),this},s._configure()},881:function(e){e.exports=JSON.parse('{"nested":{"centrifugal":{"nested":{"centrifuge":{"nested":{"protocol":{"options":{"go_package":"./;protocol"},"nested":{"Error":{"fields":{"code":{"type":"uint32","id":1},"message":{"type":"string","id":2}}},"Command":{"fields":{"id":{"type":"uint32","id":1},"method":{"type":"MethodType","id":2},"params":{"type":"bytes","id":3}},"nested":{"MethodType":{"values":{"CONNECT":0,"SUBSCRIBE":1,"UNSUBSCRIBE":2,"PUBLISH":3,"PRESENCE":4,"PRESENCE_STATS":5,"HISTORY":6,"PING":7,"SEND":8,"RPC":9,"REFRESH":10,"SUB_REFRESH":11}}}},"Reply":{"fields":{"id":{"type":"uint32","id":1},"error":{"type":"Error","id":2},"result":{"type":"bytes","id":3}}},"Push":{"fields":{"type":{"type":"PushType","id":1},"channel":{"type":"string","id":2},"data":{"type":"bytes","id":3}},"nested":{"PushType":{"values":{"PUBLICATION":0,"JOIN":1,"LEAVE":2,"UNSUBSCRIBE":3,"MESSAGE":4,"SUBSCRIBE":5,"CONNECT":6,"DISCONNECT":7,"REFRESH":8}}}},"ClientInfo":{"fields":{"user":{"type":"string","id":1},"client":{"type":"string","id":2},"conn_info":{"type":"bytes","id":3},"chan_info":{"type":"bytes","id":4}}},"Publication":{"fields":{"data":{"type":"bytes","id":4},"info":{"type":"ClientInfo","id":5},"offset":{"type":"uint64","id":6}}},"Join":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Leave":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Unsubscribe":{"fields":{}},"Subscribe":{"fields":{"recoverable":{"type":"bool","id":1},"epoch":{"type":"string","id":4},"offset":{"type":"uint64","id":5},"positioned":{"type":"bool","id":6},"data":{"type":"bytes","id":7}}},"Message":{"fields":{"data":{"type":"bytes","id":1}}},"Connect":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"data":{"type":"bytes","id":3},"subs":{"keyType":"string","type":"SubscribeResult","id":4},"expires":{"type":"bool","id":5},"ttl":{"type":"uint32","id":6}}},"Disconnect":{"fields":{"code":{"type":"uint32","id":1},"reason":{"type":"string","id":2},"reconnect":{"type":"bool","id":3}}},"Refresh":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"ConnectRequest":{"fields":{"token":{"type":"string","id":1},"data":{"type":"bytes","id":2},"subs":{"keyType":"string","type":"SubscribeRequest","id":3},"name":{"type":"string","id":4},"version":{"type":"string","id":5}}},"ConnectResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4},"data":{"type":"bytes","id":5},"subs":{"keyType":"string","type":"SubscribeResult","id":6}}},"RefreshRequest":{"fields":{"token":{"type":"string","id":1}}},"RefreshResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4}}},"SubscribeRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2},"recover":{"type":"bool","id":3},"epoch":{"type":"string","id":6},"offset":{"type":"uint64","id":7}}},"SubscribeResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2},"recoverable":{"type":"bool","id":3},"epoch":{"type":"string","id":6},"publications":{"rule":"repeated","type":"Publication","id":7},"recovered":{"type":"bool","id":8},"offset":{"type":"uint64","id":9},"positioned":{"type":"bool","id":10},"data":{"type":"bytes","id":11}}},"SubRefreshRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2}}},"SubRefreshResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"UnsubscribeRequest":{"fields":{"channel":{"type":"string","id":1}}},"UnsubscribeResult":{"fields":{}},"PublishRequest":{"fields":{"channel":{"type":"string","id":1},"data":{"type":"bytes","id":2}}},"PublishResult":{"fields":{}},"PresenceRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceResult":{"fields":{"presence":{"keyType":"string","type":"ClientInfo","id":1}}},"PresenceStatsRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceStatsResult":{"fields":{"num_clients":{"type":"uint32","id":1},"num_users":{"type":"uint32","id":2}}},"StreamPosition":{"fields":{"offset":{"type":"uint64","id":1},"epoch":{"type":"string","id":2}}},"HistoryRequest":{"fields":{"channel":{"type":"string","id":1},"limit":{"type":"int32","id":7},"since":{"type":"StreamPosition","id":8},"reverse":{"type":"bool","id":9}}},"HistoryResult":{"fields":{"publications":{"rule":"repeated","type":"Publication","id":1},"epoch":{"type":"string","id":2},"offset":{"type":"uint64","id":3}}},"PingRequest":{"fields":{}},"PingResult":{"fields":{}},"RPCRequest":{"fields":{"data":{"type":"bytes","id":1},"method":{"type":"string","id":2}}},"RPCResult":{"fields":{"data":{"type":"bytes","id":1}}},"SendRequest":{"fields":{"data":{"type":"bytes","id":1}}}}}}}}}}}')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var __webpack_exports__=__webpack_require__(714);return __webpack_exports__}()})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Centrifuge",[],t):"object"==typeof exports?exports.Centrifuge=t():e.Centrifuge=t()}(this,(function(){return function(){"use strict";var __webpack_modules__={537:function(e){e.exports=function(e,t){for(var r=new Array(arguments.length-1),n=0,i=2,s=!0;i1&&"="===e.charAt(t);)++r;return Math.ceil(3*e.length)/4-r};for(var n=new Array(64),i=new Array(123),s=0;s<64;)i[n[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;r.encode=function(e,t,r){for(var i,s=null,o=[],u=0,a=0;t>2],i=(3&c)<<4,a=1;break;case 1:o[u++]=n[i|c>>4],i=(15&c)<<2,a=2;break;case 2:o[u++]=n[i|c>>6],o[u++]=n[63&c],a=0}u>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,o)),u=0)}return a&&(o[u++]=n[i],o[u++]=61,1===a&&(o[u++]=61)),s?(u&&s.push(String.fromCharCode.apply(String,o.slice(0,u))),s.join("")):String.fromCharCode.apply(String,o.slice(0,u))};var o="invalid encoding";r.decode=function(e,t,r){for(var n,s=r,u=0,a=0;a1)break;if(void 0===(c=i[c]))throw Error(o);switch(u){case 0:n=c,u=1;break;case 1:t[r++]=n<<2|(48&c)>>4,n=c,u=2;break;case 2:t[r++]=(15&n)<<4|(60&c)>>2,n=c,u=3;break;case 3:t[r++]=(3&n)<<6|c,u=0}}if(1===u)throw Error(o);return r-s},r.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},124:function(e){function t(e,r){"string"==typeof e&&(r=e,e=void 0);var n=[];function i(e){if("string"!=typeof e){var r=s();if(t.verbose&&console.log("codegen: "+r),r="return "+r,e){for(var o=Object.keys(e),u=new Array(o.length+1),a=new Array(o.length),c=0;c0?0:2147483648,r,n);else if(isNaN(t))e(2143289344,r,n);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,r,n);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,r,n);else{var s=Math.floor(Math.log(t)/Math.LN2);e((i<<31|s+127<<23|8388607&Math.round(t*Math.pow(2,-s)*8388608))>>>0,r,n)}}function o(e,t,r){var n=e(t,r),i=2*(n>>31)+1,s=n>>>23&255,o=8388607&n;return 255===s?o?NaN:i*(1/0):0===s?1401298464324817e-60*i*o:i*Math.pow(2,s-150)*(o+8388608)}e.writeFloatLE=t.bind(null,r),e.writeFloatBE=t.bind(null,n),e.readFloatLE=o.bind(null,i),e.readFloatBE=o.bind(null,s)}(),"undefined"!=typeof Float64Array?function(){var t=new Float64Array([-0]),r=new Uint8Array(t.buffer),n=128===r[7];function i(e,n,i){t[0]=e,n[i]=r[0],n[i+1]=r[1],n[i+2]=r[2],n[i+3]=r[3],n[i+4]=r[4],n[i+5]=r[5],n[i+6]=r[6],n[i+7]=r[7]}function s(e,n,i){t[0]=e,n[i]=r[7],n[i+1]=r[6],n[i+2]=r[5],n[i+3]=r[4],n[i+4]=r[3],n[i+5]=r[2],n[i+6]=r[1],n[i+7]=r[0]}function o(e,n){return r[0]=e[n],r[1]=e[n+1],r[2]=e[n+2],r[3]=e[n+3],r[4]=e[n+4],r[5]=e[n+5],r[6]=e[n+6],r[7]=e[n+7],t[0]}function u(e,n){return r[7]=e[n],r[6]=e[n+1],r[5]=e[n+2],r[4]=e[n+3],r[3]=e[n+4],r[2]=e[n+5],r[1]=e[n+6],r[0]=e[n+7],t[0]}e.writeDoubleLE=n?i:s,e.writeDoubleBE=n?s:i,e.readDoubleLE=n?o:u,e.readDoubleBE=n?u:o}():function(){function t(e,t,r,n,i,s){var o=n<0?1:0;if(o&&(n=-n),0===n)e(0,i,s+t),e(1/n>0?0:2147483648,i,s+r);else if(isNaN(n))e(0,i,s+t),e(2146959360,i,s+r);else if(n>17976931348623157e292)e(0,i,s+t),e((o<<31|2146435072)>>>0,i,s+r);else{var u;if(n<22250738585072014e-324)e((u=n/5e-324)>>>0,i,s+t),e((o<<31|u/4294967296)>>>0,i,s+r);else{var a=Math.floor(Math.log(n)/Math.LN2);1024===a&&(a=1023),e(4503599627370496*(u=n*Math.pow(2,-a))>>>0,i,s+t),e((o<<31|a+1023<<20|1048576*u&1048575)>>>0,i,s+r)}}}function o(e,t,r,n,i){var s=e(n,i+t),o=e(n,i+r),u=2*(o>>31)+1,a=o>>>20&2047,c=4294967296*(1048575&o)+s;return 2047===a?c?NaN:u*(1/0):0===a?5e-324*u*c:u*Math.pow(2,a-1075)*(c+4503599627370496)}e.writeDoubleLE=t.bind(null,r,0,4),e.writeDoubleBE=t.bind(null,n,4,0),e.readDoubleLE=o.bind(null,i,0,4),e.readDoubleBE=o.bind(null,s,4,0)}(),e}function r(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function n(e,t,r){t[r]=e>>>24,t[r+1]=e>>>16&255,t[r+2]=e>>>8&255,t[r+3]=255&e}function i(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function s(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t)},199:function(module){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},626:function(e,t){var r=t,n=r.isAbsolute=function(e){return/^(?:\/|\w+:)/.test(e)},i=r.normalize=function(e){var t=(e=e.replace(/\\/g,"/").replace(/\/{2,}/g,"/")).split("/"),r=n(e),i="";r&&(i=t.shift()+"/");for(var s=0;s0&&".."!==t[s-1]?t.splice(--s,2):r?t.splice(s,1):++s:"."===t[s]?t.splice(s,1):++s;return i+t.join("/")};r.resolve=function(e,t,r){return r||(t=i(t)),n(t)?t:(r||(e=i(e)),(e=e.replace(/(?:\/|^)[^/]+$/,"")).length?i(e+"/"+t):t)}},662:function(e){e.exports=function(e,t,r){var n=r||8192,i=n>>>1,s=null,o=n;return function(r){if(r<1||r>i)return e(r);o+r>n&&(s=e(n),o=0);var u=t.call(s,o,o+=r);return 7&o&&(o=1+(7|o)),u}}},997:function(e,t){var r=t;r.length=function(e){for(var t=0,r=0,n=0;n191&&n<224?s[o++]=(31&n)<<6|63&e[t++]:n>239&&n<365?(n=((7&n)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,s[o++]=55296+(n>>10),s[o++]=56320+(1023&n)):s[o++]=(15&n)<<12|(63&e[t++])<<6|63&e[t++],o>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i?(o&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))},r.write=function(e,t,r){for(var n,i,s=r,o=0;o>6|192,t[r++]=63&n|128):55296==(64512&n)&&56320==(64512&(i=e.charCodeAt(o+1)))?(n=65536+((1023&n)<<10)+(1023&i),++o,t[r++]=n>>18|240,t[r++]=n>>12&63|128,t[r++]=n>>6&63|128,t[r++]=63&n|128):(t[r++]=n>>12|224,t[r++]=n>>6&63|128,t[r++]=63&n|128);return r-s}},382:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.Centrifuge=void 0;var n=u(r(187)),i=u(r(471)),s=r(147),o=r(853);function u(e){return e&&e.__esModule?e:{default:e}}function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){for(var r=0;r0&&(a+="&"),a+=encodeURIComponent(c)+"="+encodeURIComponent(t[c]));for(var l in a.length>0&&(a="?"+a),o.open("POST",e+a,!0),"withCredentials"in o&&(o.withCredentials=!this._config.disableWithCredentials),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.setRequestHeader("Content-Type","application/json"),n)n.hasOwnProperty(l)&&o.setRequestHeader(l,n[l]);return o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e,t=!1;try{e=JSON.parse(o.responseText),t=!0}catch(e){s({error:"Invalid JSON. Data was: "+o.responseText,status:200,data:null})}t&&s({data:e,status:200})}else u._log("wrong status code in AJAX response",o.status),s({status:o.status,data:null})},setTimeout((function(){return o.send(JSON.stringify(i))}),20),o}},{key:"_log",value:function(){(0,o.log)("info",arguments)}},{key:"_debug",value:function(){!0===this._config.debug&&(0,o.log)("debug",arguments)}},{key:"_websocketSupported",value:function(){return null!==this._config.websocket||!("function"!=typeof WebSocket&&"object"!==("undefined"==typeof WebSocket?"undefined":a(WebSocket)))}},{key:"_setFormat",value:function(e){if(!this._formatOverride(e)){if("protobuf"===e)throw new Error("not implemented by JSON only Centrifuge client – use client with Protobuf");this._binary=!1,this._methodType=s.JsonMethodType,this._pushType=s.JsonPushType,this._encoder=new s.JsonEncoder,this._decoder=new s.JsonDecoder}}},{key:"_formatOverride",value:function(e){return!1}},{key:"_configure",value:function(e){if(!("Promise"in r.g))throw new Error("Promise polyfill required");if((0,o.extend)(this._config,e||{}),this._debug("centrifuge config",this._config),!this._url)throw new Error("url required");if((0,o.startsWith)(this._url,"ws")&&this._url.indexOf("format=protobuf")>-1||"protobuf"===this._config.protocol)this._setFormat("protobuf"),this._protocol="protobuf";else{if(""!==this._config.protocol&&"json"!==this._config.protocol)throw new Error("unsupported protocol "+this._config.protocol);this._setFormat("json")}if((0,o.startsWith)(this._url,"http"))if(this._debug("client will try to connect to SockJS endpoint"),null!==this._config.sockjs)this._debug("SockJS explicitly provided in options"),this._sockjs=this._config.sockjs;else{if(void 0===r.g.SockJS)throw new Error("SockJS not found, use ws:// in url or include SockJS");this._debug("use globally defined SockJS"),this._sockjs=r.g.SockJS}else this._debug("client will connect to websocket endpoint");this._xmlhttprequest=this._config.xmlhttprequest}},{key:"_setStatus",value:function(e){this._status!==e&&(this._debug("Status",this._status,"->",e),this._status=e)}},{key:"_isDisconnected",value:function(){return"disconnected"===this._status}},{key:"_isConnecting",value:function(){return"connecting"===this._status}},{key:"_isConnected",value:function(){return"connected"===this._status}},{key:"_nextMessageId",value:function(){return++this._messageId}},{key:"_resetRetry",value:function(){this._debug("reset retries count to 0"),this._retries=0}},{key:"_getRetryInterval",value:function(){var e=(0,o.backoff)(this._retries,this._config.minRetry,this._config.maxRetry);return this._retries+=1,e}},{key:"_abortInflightXHRs",value:function(){for(var e in this._xhrs){try{this._xhrs[e].abort()}catch(e){this._debug("error aborting xhr",e)}delete this._xhrs[e]}}},{key:"_clearConnectedState",value:function(e){for(var t in this._clientID=null,this._stopPing(),this._callbacks)if(this._callbacks.hasOwnProperty(t)){var r=this._callbacks[t];clearTimeout(r.timeout);var n=r.errback;if(!n)continue;n({error:this._createErrorObject("disconnected")})}for(var i in this._callbacks={},this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];e?(s._isSuccess()&&(s._triggerUnsubscribe(),s._recover=!0),s._shouldResubscribe()&&s._setSubscribing()):s._setUnsubscribed()}for(var o in this._abortInflightXHRs(),null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),this._subRefreshTimeouts)this._subRefreshTimeouts.hasOwnProperty(o)&&this._subRefreshTimeouts[o]&&this._clearSubRefreshTimeout(o);this._subRefreshTimeouts={},this._reconnect||(this._subs={})}},{key:"_isTransportOpen",value:function(){return this._isSockjs?this._transport&&this._transport.transport&&this._transport.transport.readyState===this._transport.transport.OPEN:this._transport&&this._transport.readyState===this._transport.OPEN}},{key:"_transportSend",value:function(e){if(!e.length)return!0;if(!this._isTransportOpen()){for(var t in e){var r=t.id;if(r in this._callbacks){var n=this._callbacks[r];clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,n.errback)({error:this._createErrorObject(d,0)})}}return!1}return this._transport.send(this._encoder.encodeCommands(e)),!0}},{key:"_getSubProtocol",value:function(){return this._protocol?"centrifuge-"+this._protocol:""}},{key:"_setupTransport",value:function(){var e=this;if(this._isSockjs=!1,null!==this._sockjs){var t={transports:this._config.sockjsTransports};null!==this._config.sockjsServer&&(t.server=this._config.sockjsServer),null!==this._config.sockjsTimeout&&(t.timeout=this._config.sockjsTimeout),this._isSockjs=!0,this._transport=new this._sockjs(this._url,null,t)}else{if(!this._websocketSupported())return void this._debug("No Websocket support and no SockJS configured, can not connect");null!==this._config.websocket?this._websocket=this._config.websocket:this._websocket=WebSocket;var r=this._getSubProtocol();this._transport=""!==r?new this._websocket(this._url,r):new this._websocket(this._url),!0===this._binary&&(this._transport.binaryType="arraybuffer")}this._transport.onopen=function(){e._transportClosed=!1,e._isSockjs?(e._transportName="sockjs-"+e._transport.transport,e._transport.onheartbeat=function(){return e._restartPing()}):e._transportName="websocket";var t={};(e._token||e._connectData||e._config.name||e._config.version)&&(t.params={}),e._token&&(t.params.token=e._token),e._connectData&&(t.params.data=e._connectData),e._config.name&&(t.params.name=e._config.name),e._config.version&&(t.params.version=e._config.version);var r={},n=!1;for(var i in e._serverSubs)if(e._serverSubs.hasOwnProperty(i)&&e._serverSubs[i].recoverable){n=!0;var s={recover:!0};e._serverSubs[i].seq||e._serverSubs[i].gen?(e._serverSubs[i].seq&&(s.seq=e._serverSubs[i].seq),e._serverSubs[i].gen&&(s.gen=e._serverSubs[i].gen)):e._serverSubs[i].offset&&(s.offset=e._serverSubs[i].offset),e._serverSubs[i].epoch&&(s.epoch=e._serverSubs[i].epoch),r[i]=s}n&&(t.params||(t.params={}),t.params.subs=r),e._latencyStart=new Date,e._call(t).then((function(t){e._connectResponse(e._decoder.decodeCommandResult(e._methodType.CONNECT,t.result),n),t.next&&t.next()}),(function(t){109===t.error.code&&(e._refreshRequired=!0),e._disconnect("connect error",!0),t.next&&t.next()}))},this._transport.onerror=function(t){e._debug("transport level error",t)},this._transport.onclose=function(t){e._transportClosed=!0;var r=d,n=!0;if(t&&"reason"in t&&t.reason)try{var i=JSON.parse(t.reason);e._debug("reason is an advice object",i),r=i.reason,n=i.reconnect}catch(n){r=t.reason,e._debug("reason is a plain string",r)}if(null!==e._config.onTransportClose&&e._config.onTransportClose({event:t,reason:r,reconnect:n}),e._disconnect(r,n),!0===e._reconnect){e._reconnecting=!0;var s=e._getRetryInterval();e._debug("reconnect after "+s+" milliseconds"),setTimeout((function(){!0===e._reconnect&&(e._refreshRequired?e._refresh():e._connect())}),s)}},this._transport.onmessage=function(t){e._dataReceived(t.data)}}},{key:"rpc",value:function(e){return this._rpc("",e)}},{key:"namedRPC",value:function(e,t){return this._rpc(e,t)}},{key:"_rpc",value:function(e,t){var r={data:t};""!==e&&(r.method=e);var n={method:this._methodType.RPC,params:r};return this._methodCall(n,(function(e){return e}))}},{key:"send",value:function(e){var t={method:this._methodType.SEND,params:{data:e}};return this.isConnected()&&this._transportSend([t])?Promise.resolve({}):Promise.reject(this._createErrorObject(d,0))}},{key:"_getHistoryParams",value:function(e,t){var r={channel:e};return void 0!==t&&(t.since&&(r.since={offset:t.since.offset},t.since.epoch&&(r.since.epoch=t.since.epoch)),void 0!==t.limit&&(r.limit=t.limit),!0===t.reverse&&(r.reverse=!0)),r}},{key:"_methodCall",value:function(e,t){var r=this;return this.isConnected()?new Promise((function(n,i){r._call(e).then((function(i){n(t(r._decoder.decodeCommandResult(e.method,i.result))),i.next&&i.next()}),(function(e){i(e.error),e.next&&e.next()}))})):Promise.reject(this._createErrorObject(d,0))}},{key:"publish",value:function(e,t){var r={method:this._methodType.PUBLISH,params:{channel:e,data:t}};return this._methodCall(r,(function(){return{}}))}},{key:"history",value:function(e,t){var r=this._getHistoryParams(e,t),n={method:this._methodType.HISTORY,params:r};return this._methodCall(n,(function(e){return{publications:e.publications,epoch:e.epoch||"",offset:e.offset||0}}))}},{key:"presence",value:function(e){var t={method:this._methodType.PRESENCE,params:{channel:e}};return this._methodCall(t,(function(e){return{presence:e.presence}}))}},{key:"presenceStats",value:function(e){var t={method:this._methodType.PRESENCE_STATS,params:{channel:e}};return this._methodCall(t,(function(e){return{num_users:e.num_users,num_clients:e.num_clients}}))}},{key:"_dataReceived",value:function(e){var t=this,r=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then((function(){var e;t._dispatchPromise=new Promise((function(t){e=t})),t._dispatchSynchronized(r,e)})),this._restartPing()}},{key:"_dispatchSynchronized",value:function(e,t){var r=this,n=Promise.resolve(),i=function(t){e.hasOwnProperty(t)&&(n=n.then((function(){return r._dispatchReply(e[t])})))};for(var s in e)i(s);n=n.then((function(){t()}))}},{key:"_dispatchReply",value:function(e){var t,r=new Promise((function(e){t=e}));if(null==e)return this._debug("dispatch: got undefined or null reply"),t(),r;var n=e.id;return n&&n>0?this._handleReply(e,t):this._handlePush(e.result,t),r}},{key:"_call",value:function(e){var t=this;return new Promise((function(r,n){var i=t._addMessage(e);t._registerCall(i,r,n)}))}},{key:"_connect",value:function(){this.isConnected()?this._debug("connect called when already connected"):"connecting"!==this._status&&(this._debug("start connecting"),this._setStatus("connecting"),this._clientID=null,this._reconnect=!0,this._setupTransport())}},{key:"_disconnect",value:function(e,t){var r=t||!1;if(!1===r&&(this._reconnect=!1),this._isDisconnected())r||this._clearConnectedState(r);else{if(this._clearConnectedState(r),this._debug("disconnected:",e,t),this._setStatus("disconnected"),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),!1===this._reconnecting){for(var n in this._serverSubs)this._serverSubs.hasOwnProperty(n)&&this.emit("unsubscribe",{channel:n});this.emit("disconnect",{reason:e,reconnect:r})}!1===r&&(this._subs={},this._serverSubs={}),this._transportClosed||this._transport.close()}}},{key:"_refreshFailed",value:function(){this._numRefreshFailed=0,this._isDisconnected()||this._disconnect("refresh failed",!1),null!==this._config.onRefreshFailed&&this._config.onRefreshFailed()}},{key:"_refresh",value:function(){var e=this;if(this._debug("refresh token"),0===this._config.refreshAttempts)return this._debug("refresh attempts set to 0, do not send refresh request at all"),void this._refreshFailed();null!==this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var t=this._clientID,r=this._newXHRID(),n=function(n){if(r in e._xhrs&&delete e._xhrs[r],e._clientID===t)if(n.error||200!==n.status){if(n.error?e._debug("error refreshing connection token",n.error):e._debug("error refreshing connection token: wrong status code",n.status),e._numRefreshFailed++,null!==e._refreshTimeout&&(clearTimeout(e._refreshTimeout),e._refreshTimeout=null),null!==e._config.refreshAttempts&&e._numRefreshFailed>=e._config.refreshAttempts)return void e._refreshFailed();var i=Math.round(1e3*Math.random()*Math.max(e._numRefreshFailed,20)),s=e._config.refreshInterval+i;e._refreshTimeout=setTimeout((function(){return e._refresh()}),s)}else if(e._numRefreshFailed=0,e._token=n.data.token,e._token)if(e._isDisconnected()&&e._reconnect)e._debug("token refreshed, connect from scratch"),e._connect();else{e._debug("send refreshed token");var o={method:e._methodType.REFRESH,params:{token:e._token}};e._call(o).then((function(t){e._refreshResponse(e._decoder.decodeCommandResult(e._methodType.REFRESH,t.result)),t.next&&t.next()}),(function(t){e._refreshError(t.error),t.next&&t.next()}))}else e._refreshFailed()};if(null!==this._config.onRefresh)this._config.onRefresh({},n);else{var i=this._ajax(this._config.refreshEndpoint,this._config.refreshParams,this._config.refreshHeaders,this._config.refreshData,n);this._xhrs[r]=i}}},{key:"_refreshError",value:function(e){var t=this;this._debug("refresh error",e),this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null);var r=this._config.refreshInterval+Math.round(1e3*Math.random());this._refreshTimeout=setTimeout((function(){return t._refresh()}),r)}},{key:"_refreshResponse",value:function(e){var t=this;this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._clientID=e.client,this._refreshTimeout=setTimeout((function(){return t._refresh()}),this._getTTLMilliseconds(e.ttl)))}},{key:"_newXHRID",value:function(){return this._xhrID++,this._xhrID}},{key:"_subRefresh",value:function(e){var t=this;if(this._debug("refresh subscription token for channel",e),void 0!==this._subRefreshTimeouts[e]){this._clearSubRefreshTimeout(e);var r=this._clientID,n=this._newXHRID(),i=function(i){if(n in t._xhrs&&delete t._xhrs[n],!i.error&&200===i.status&&t._clientID===r){var s={};if(i.data.channels)for(var o in i.data.channels){var u=i.data.channels[o];u.channel&&(s[u.channel]=u.token)}var a=s[e];if(a){var c={method:t._methodType.SUB_REFRESH,params:{channel:e,token:a}};null!==t._getSub(e)&&t._call(c).then((function(r){t._subRefreshResponse(e,t._decoder.decodeCommandResult(t._methodType.SUB_REFRESH,r.result)),r.next&&r.next()}),(function(r){t._subRefreshError(e,r.error),r.next&&r.next()}))}}},s={client:this._clientID,channels:[e]};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:s},i);else{var o=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,s,i);this._xhrs[n]=o}}}},{key:"_clearSubRefreshTimeout",value:function(e){void 0!==this._subRefreshTimeouts[e]&&(clearTimeout(this._subRefreshTimeouts[e]),delete this._subRefreshTimeouts[e])}},{key:"_subRefreshError",value:function(e,t){var r=this;if(this._debug("subscription refresh error",e,t),this._clearSubRefreshTimeout(e),null!==this._getSub(e)){var n=Math.round(1e3*Math.random()),i=setTimeout((function(){return r._subRefresh(e)}),this._config.subRefreshInterval+n);this._subRefreshTimeouts[e]=i}}},{key:"_subRefreshResponse",value:function(e,t){var r=this;if(this._debug("subscription refresh success",e),this._clearSubRefreshTimeout(e),null!==this._getSub(e)&&!0===t.expires){var n=setTimeout((function(){return r._subRefresh(e)}),this._getTTLMilliseconds(t.ttl));this._subRefreshTimeouts[e]=n}}},{key:"_subscribe",value:function(e,t){var r=this;this._debug("subscribing on",e.channel);var n=e.channel;if(n in this._subs||(this._subs[n]=e),this.isConnected()){e._setSubscribing(t);var i={method:this._methodType.SUBSCRIBE,params:{channel:n}};if((0,o.startsWith)(n,this._config.privateChannelPrefix))this._isSubscribeBatching?this._privateChannels[n]=!0:(this.startSubscribeBatching(),this._subscribe(e),this.stopSubscribeBatching());else{var s=e._needRecover();if(!0===s){i.params.recover=!0;var u=this._getLastSeq(n),a=this._getLastGen(n);if(u||a)u&&(i.params.seq=u),a&&(i.params.gen=a);else{var c=this._getLastOffset(n);c&&(i.params.offset=c)}var l=this._getLastEpoch(n);l&&(i.params.epoch=l)}this._call(i).then((function(e){r._subscribeResponse(n,s,r._decoder.decodeCommandResult(r._methodType.SUBSCRIBE,e.result)),e.next&&e.next()}),(function(e){r._subscribeError(n,e.error),e.next&&e.next()}))}}else e._setNew()}},{key:"_unsubscribe",value:function(e){delete this._subs[e.channel],delete this._lastOffset[e.channel],delete this._lastSeq[e.channel],delete this._lastGen[e.channel],this.isConnected()&&this._addMessage({method:this._methodType.UNSUBSCRIBE,params:{channel:e.channel}})}},{key:"_getTTLMilliseconds",value:function(e){return Math.min(1e3*e,2147483647)}},{key:"getSub",value:function(e){return this._getSub(e)}},{key:"_getSub",value:function(e){return this._subs[e]||null}},{key:"_isServerSub",value:function(e){return void 0!==this._serverSubs[e]}},{key:"_connectResponse",value:function(e,t){var r=this,n=this._reconnecting;if(this._reconnecting=!1,this._resetRetry(),this._refreshRequired=!1,!this.isConnected()){for(var i in null!==this._latencyStart&&(this._latency=(new Date).getTime()-this._latencyStart.getTime(),this._latencyStart=null),this._clientID=e.client,this._setStatus("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout((function(){return r._refresh()}),this._getTTLMilliseconds(e.ttl))),this.startBatching(),this.startSubscribeBatching(),this._subs)if(this._subs.hasOwnProperty(i)){var s=this._subs[i];s._shouldResubscribe()&&this._subscribe(s,n)}this.stopSubscribeBatching(),this.stopBatching(),this._startPing();var o={client:e.client,transport:this._transportName,latency:this._latency};e.data&&(o.data=e.data),this.emit("connect",o),e.subs&&this._processServerSubs(e.subs)}}},{key:"_processServerSubs",value:function(e){for(var t in e)if(e.hasOwnProperty(t)){var r=e[t],n={channel:t,isResubscribe:void 0!==this._serverSubs[t]};n=this._expandSubscribeContext(n,r),this.emit("subscribe",n)}for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];if(s.recovered){var o=s.publications;if(o&&o.length>0)for(var u in o.length>1&&(!o[0].offset||o[0].offset>o[1].offset)&&(o=o.reverse()),o)o.hasOwnProperty(u)&&this._handlePublication(i,o[u])}this._serverSubs[i]={seq:s.seq,gen:s.gen,offset:s.offset,epoch:s.epoch,recoverable:s.recoverable}}}},{key:"_stopPing",value:function(){null!==this._pongTimeout&&(clearTimeout(this._pongTimeout),this._pongTimeout=null),null!==this._pingTimeout&&(clearTimeout(this._pingTimeout),this._pingTimeout=null)}},{key:"_startPing",value:function(){var e=this;!0!==this._config.ping||this._config.pingInterval<=0||this.isConnected()&&(this._pingTimeout=setTimeout((function(){e.isConnected()?(e.ping(),e._pongTimeout=setTimeout((function(){e._disconnect("no ping",!0)}),e._config.pongWaitTimeout)):e._stopPing()}),this._config.pingInterval))}},{key:"_restartPing",value:function(){this._stopPing(),this._startPing()}},{key:"_subscribeError",value:function(e,t){var r=this._getSub(e);r&&r._isSubscribing()&&(0!==t.code||t.message!==p?r._setSubscribeError(t):this._disconnect("timeout",!0))}},{key:"_expandSubscribeContext",value:function(e,t){var r=!1;"recovered"in t&&(r=t.recovered),e.recovered=r;var n=!1;"positioned"in t&&(n=t.positioned);var i="";"epoch"in t&&(i=t.epoch);var s=0;return"offset"in t&&(s=t.offset),n&&(e.streamPosition={offset:s,epoch:i}),t.data&&(e.data=t.data),e}},{key:"_subscribeResponse",value:function(e,t,r){var n=this,i=this._getSub(e);if(i&&i._isSubscribing()){i._setSubscribeSuccess(r);var s=r.publications;if(s&&s.length>0)for(var o in s.length>=2&&!s[0].offset&&!s[1].offset&&(s=s.reverse()),s)s.hasOwnProperty(o)&&this._handlePublication(e,s[o]);if(!r.recoverable||t&&r.recovered||(this._lastSeq[e]=r.seq||0,this._lastGen[e]=r.gen||0,this._lastOffset[e]=r.offset||0),this._lastEpoch[e]=r.epoch||"",r.recoverable&&(i._recoverable=!0),!0===r.expires){var u=setTimeout((function(){return n._subRefresh(e)}),this._getTTLMilliseconds(r.ttl));this._subRefreshTimeouts[e]=u}}}},{key:"_handleReply",value:function(e,t){var r=e.id,n=e.result;if(r in this._callbacks){var i=this._callbacks[r];if(clearTimeout(this._callbacks[r].timeout),delete this._callbacks[r],(0,o.errorExists)(e)){var s=i.errback;if(!s)return void t();s({error:e.error,next:t})}else{var u=i.callback;if(!u)return;u({result:n,next:t})}}else t()}},{key:"_handleJoin",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("join",r):this._isServerSub(e)&&(r.channel=e,this.emit("join",r))}},{key:"_handleLeave",value:function(e,t){var r={info:t.info},n=this._getSub(e);n?n.emit("leave",r):this._isServerSub(e)&&(r.channel=e,this.emit("leave",r))}},{key:"_handleUnsub",value:function(e,t){var r={},n=this._getSub(e);n?(n.unsubscribe(),!0===t.resubscribe&&n.subscribe()):this._isServerSub(e)&&(delete this._serverSubs[e],r.channel=e,this.emit("unsubscribe",r))}},{key:"_handleSub",value:function(e,t){this._serverSubs[e]={seq:t.seq,gen:t.gen,offset:t.offset,epoch:t.epoch,recoverable:t.recoverable};var r={channel:e,isResubscribe:!1};r=this._expandSubscribeContext(r,t),this.emit("subscribe",r)}},{key:"_handlePublication",value:function(e,t){var r=this._getSub(e),n={data:t.data,seq:t.seq,gen:t.gen,offset:t.offset};t.info&&(n.info=t.info),r?(void 0!==t.seq&&(this._lastSeq[e]=t.seq),void 0!==t.gen&&(this._lastGen[e]=t.gen),void 0!==t.offset&&(this._lastOffset[e]=t.offset),r.emit("publish",n)):this._isServerSub(e)&&(void 0!==t.seq&&(this._serverSubs[e].seq=t.seq),void 0!==t.gen&&(this._serverSubs[e].gen=t.gen),void 0!==t.offset&&(this._serverSubs[e].offset=t.offset),n.channel=e,this.emit("publish",n))}},{key:"_handleMessage",value:function(e){this.emit("message",e.data)}},{key:"_handlePush",value:function(e,t){var r=this._decoder.decodePush(e),n=0;"type"in r&&(n=r.type);var i=r.channel;if(n===this._pushType.PUBLICATION){var s=this._decoder.decodePushData(this._pushType.PUBLICATION,r.data);this._handlePublication(i,s)}else if(n===this._pushType.MESSAGE){var o=this._decoder.decodePushData(this._pushType.MESSAGE,r.data);this._handleMessage(o)}else if(n===this._pushType.JOIN){var u=this._decoder.decodePushData(this._pushType.JOIN,r.data);this._handleJoin(i,u)}else if(n===this._pushType.LEAVE){var a=this._decoder.decodePushData(this._pushType.LEAVE,r.data);this._handleLeave(i,a)}else if(n===this._pushType.UNSUBSCRIBE){var c=this._decoder.decodePushData(this._pushType.UNSUBSCRIBE,r.data);this._handleUnsub(i,c)}else if(n===this._pushType.SUBSCRIBE){var l=this._decoder.decodePushData(this._pushType.UNSUBSCRIBE,r.data);this._handleSub(i,l)}t()}},{key:"_flush",value:function(){var e=this._messages.slice(0);this._messages=[],this._transportSend(e)}},{key:"_ping",value:function(){var e=this,t={method:this._methodType.PING};this._call(t).then((function(t){e._pingResponse(e._decoder.decodeCommandResult(e._methodType.PING,t.result)),t.next&&t.next()}),(function(t){e._debug("ping error",t.error),t.next&&t.next()}))}},{key:"_pingResponse",value:function(e){this.isConnected()&&(this._stopPing(),this._startPing())}},{key:"_getLastSeq",value:function(e){return this._lastSeq[e]||0}},{key:"_getLastOffset",value:function(e){return this._lastOffset[e]||0}},{key:"_getLastGen",value:function(e){return this._lastGen[e]||0}},{key:"_getLastEpoch",value:function(e){return this._lastEpoch[e]||""}},{key:"_createErrorObject",value:function(e,t){return{message:e,code:t||0}}},{key:"_registerCall",value:function(e,t,r){var n=this;this._callbacks[e]={callback:t,errback:r,timeout:null},this._callbacks[e].timeout=setTimeout((function(){delete n._callbacks[e],(0,o.isFunction)(r)&&r({error:n._createErrorObject(p)})}),this._config.timeout)}},{key:"_addMessage",value:function(e){var t=this._nextMessageId();return e.id=t,!0===this._isBatching?this._messages.push(e):this._transportSend([e]),t}},{key:"isConnected",value:function(){return this._isConnected()}},{key:"connect",value:function(){this._connect()}},{key:"disconnect",value:function(){this._disconnect("client",!1)}},{key:"ping",value:function(){return this._ping()}},{key:"startBatching",value:function(){this._isBatching=!0}},{key:"stopBatching",value:function(){this._isBatching=!1,this._flush()}},{key:"startSubscribeBatching",value:function(){this._isSubscribeBatching=!0}},{key:"stopSubscribeBatching",value:function(){var e=this;this._isSubscribeBatching=!1;var t=this._privateChannels;this._privateChannels={};var r=[];for(var n in t)if(t.hasOwnProperty(n)){if(!this._getSub(n))continue;r.push(n)}if(0!==r.length){var i={client:this._clientID,channels:r},s=this._clientID,o=this._newXHRID(),u=function(t){if(o in e._xhrs&&delete e._xhrs[o],e._clientID===s)if(t.error||200!==t.status){for(var n in e._debug("authorization request failed"),r)if(r.hasOwnProperty(n)){var i=r[n];e._subscribeError(i,e._createErrorObject("authorization request failed"))}}else{var u={};if(t.data.channels)for(var a in t.data.channels){var c=t.data.channels[a];c.channel&&(u[c.channel]=c.token)}var l=!1;for(var f in e._isBatching||(e.startBatching(),l=!0),r)!r.hasOwnProperty(f)||function(){var t=r[f],n=u[t];if(!n)return e._subscribeError(t,e._createErrorObject("permission denied",103)),"continue";var i={method:e._methodType.SUBSCRIBE,params:{channel:t,token:n}},s=e._getSub(t);if(null===s)return"continue";var o=s._needRecover();if(!0===o){i.params.recover=!0;var a=e._getLastSeq(t),c=e._getLastGen(t);if(a||c)a&&(i.params.seq=a),c&&(i.params.gen=c);else{var l=e._getLastOffset(t);l&&(i.params.offset=l)}var h=e._getLastEpoch(t);h&&(i.params.epoch=h)}e._call(i).then((function(r){e._subscribeResponse(t,o,e._decoder.decodeCommandResult(e._methodType.SUBSCRIBE,r.result)),r.next&&r.next()}),(function(r){e._subscribeError(t,r.error),r.next&&r.next()}))}();l&&e.stopBatching()}};if(null!==this._config.onPrivateSubscribe)this._config.onPrivateSubscribe({data:i},u);else{var a=this._ajax(this._config.subscribeEndpoint,this._config.subscribeParams,this._config.subscribeHeaders,i,u);this._xhrs[o]=a}}else this._debug("no private channels found, no need to make request")}},{key:"_setSubscribeSince",value:function(e,t){this._lastOffset[e.channel]=t.offset,this._lastEpoch[e.channel]=t.epoch,e._setNeedRecover(!0)}},{key:"subscribe",value:function(e,t,r){var n=this._getSub(e);if(null!==n)return n._setEvents(t),n._isUnsubscribed()&&n.subscribe(),n;var s=new i.default(this,e,t);return this._subs[e]=s,r&&r.since&&this._setSubscribeSince(s,r.since),s.subscribe(),s}}])&&c(t.prototype,n),_}(n.default);t.Centrifuge=y},714:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(885).CentrifugeProtobuf;t.default=n,e.exports=t.default},147:function(e,t){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,c=l,console&&console.warn&&console.warn(c)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=l.bind(n);return i.listener=r,n.wrapFn=i,i}function h(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=s[e];if(void 0===a)return!1;if("function"==typeof a)n(a,this,t);else{var c=a.length,l=d(a,c);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){o=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},492:function(e,t,r){e.exports=r(836)},996:function(e,t,r){var n=t,i=r(25),s=r(935);function o(e,t,r,n){if(t.resolvedType)if(t.resolvedType instanceof i){e("switch(d%s){",n);for(var s=t.resolvedType.values,o=Object.keys(s),u=0;u>>0",n,n);break;case"int32":case"sint32":case"sfixed32":e("m%s=d%s|0",n,n);break;case"uint64":a=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",n,n,a)('else if(typeof d%s==="string")',n)("m%s=parseInt(d%s,10)",n,n)('else if(typeof d%s==="number")',n)("m%s=d%s",n,n)('else if(typeof d%s==="object")',n)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",n,n,n,a?"true":"");break;case"bytes":e('if(typeof d%s==="string")',n)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",n,n,n)("else if(d%s.length)",n)("m%s=d%s",n,n);break;case"string":e("m%s=String(d%s)",n,n);break;case"bool":e("m%s=Boolean(d%s)",n,n)}}return e}function u(e,t,r,n){if(t.resolvedType)t.resolvedType instanceof i?e("d%s=o.enums===String?types[%i].values[m%s]:m%s",n,r,n,n):e("d%s=types[%i].toObject(m%s,o)",n,r,n);else{var s=!1;switch(t.type){case"double":case"float":e("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",n,n,n,n);break;case"uint64":s=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":e('if(typeof m%s==="number")',n)("d%s=o.longs===String?String(m%s):m%s",n,n,n)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",n,n,n,n,s?"true":"",n);break;case"bytes":e("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",n,n,n,n,n);break;default:e("d%s=m%s",n,n)}}return e}n.fromObject=function(e){var t=e.fieldsArray,r=s.codegen(["d"],e.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!t.length)return r("return new this.ctor");r("var m=new this.ctor");for(var n=0;n>>3){");for(var r=0;r>>3){")("case 1: k=r.%s(); break",u.keyType)("case 2:"),void 0===i.basic[a]?t("value=types[%i].decode(r,r.uint32())",r):t("value=r.%s()",a),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),void 0!==i.long[u.keyType]?t('%s[typeof k==="object"?util.longToHash(k):k]=value',c):t("%s[k]=value",c)):u.repeated?(t("if(!(%s&&%s.length))",c,c)("%s=[]",c),void 0!==i.packed[a]&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0,8|i.mapKey[c.keyType],c.keyType),void 0===h?r("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",l,t):r(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,f,t),r("}")("}")):c.repeated?(r("if(%s!=null&&%s.length){",t,t),c.packed&&void 0!==i.packed[f]?r("w.uint32(%i).fork()",(c.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",t)("w.%s(%s[i])",f,t)("w.ldelim()"):(r("for(var i=0;i<%s.length;++i)",t),void 0===h?o(r,c,l,t+"[i]"):r("w.uint32(%i).%s(%s[i])",(c.id<<3|h)>>>0,f,t)),r("}")):(c.optional&&r("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",t,c.name),void 0===h?o(r,c,l,t):r("w.uint32(%i).%s(%s)",(c.id<<3|h)>>>0,f,t))}return r("return w")};var n=r(25),i=r(63),s=r(935);function o(e,t,r,n){return t.resolvedType.group?e("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",r,n,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):e("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",r,n,(t.id<<3|2)>>>0)}},25:function(e,t,r){e.exports=o;var n=r(243);((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var i=r(313),s=r(935);function o(e,t,r,i,s){if(n.call(this,e,r),t&&"object"!=typeof t)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=s||{},this.reserved=void 0,t)for(var o=Object.keys(t),u=0;ut)return!0;return!1},l.isReservedName=function(e,t){if(e)for(var r=0;r0;){var n=e.shift();if(r.nested&&r.nested[n]){if(!((r=r.nested[n])instanceof l))throw Error("path conflicts with non-namespace objects")}else r.add(r=new l(n))}return t&&r.addJSON(t),r},l.prototype.resolveAll=function(){for(var e=this.nestedArray,t=0;t-1)return n}else if(n instanceof l&&(n=n.lookup(e.slice(1),t,!0)))return n}else for(var i=0;i-1&&this.oneof.splice(t,1),e.partOf=null,this},o.prototype.onAdd=function(e){n.prototype.onAdd.call(this,e);for(var t=0;t "+e.len)}function a(e){this.buf=e,this.pos=0,this.len=e.length}var c,l="undefined"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new a(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new a(e);throw Error("illegal buffer")},f=function(){return i.Buffer?function(e){return(a.create=function(e){return i.Buffer.isBuffer(e)?new n(e):l(e)})(e)}:l};function h(){var e=new s(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw u(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw u(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function p(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw u(this,8);return new s(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}a.create=f(),a.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,a.prototype.uint32=(c=4294967295,function(){if(c=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return c;if(c=(c|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return c;if((this.pos+=5)>this.len)throw this.pos=this.len,u(this,10);return c}),a.prototype.int32=function(){return 0|this.uint32()},a.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},a.prototype.bool=function(){return 0!==this.uint32()},a.prototype.fixed32=function(){if(this.pos+4>this.len)throw u(this,4);return p(this.buf,this.pos+=4)},a.prototype.sfixed32=function(){if(this.pos+4>this.len)throw u(this,4);return 0|p(this.buf,this.pos+=4)},a.prototype.float=function(){if(this.pos+4>this.len)throw u(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},a.prototype.double=function(){if(this.pos+8>this.len)throw u(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},a.prototype.bytes=function(){var e=this.uint32(),t=this.pos,r=this.pos+e;if(r>this.len)throw u(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,r):t===r?new this.buf.constructor(0):this._slice.call(this.buf,t,r)},a.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},a.prototype.skip=function(e){if("number"==typeof e){if(this.pos+e>this.len)throw u(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw u(this)}while(128&this.buf[this.pos++]);return this},a.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},a._configure=function(e){n=e,a.create=f(),n._configure();var t=i.Long?"toLong":"toNumber";i.merge(a.prototype,{int64:function(){return h.call(this)[t](!1)},uint64:function(){return h.call(this)[t](!0)},sint64:function(){return h.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},593:function(e,t,r){e.exports=s;var n=r(408);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(e){n.call(this,e)}s._configure=function(){i.Buffer&&(s.prototype._slice=i.Buffer.prototype.slice)},s.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+e,this.len))},s._configure()},424:function(e,t,r){e.exports=f;var n=r(313);((f.prototype=Object.create(n.prototype)).constructor=f).className="Root";var i,s,o,u=r(548),a=r(25),c=r(598),l=r(935);function f(e){n.call(this,"",e),this.deferred=[],this.files=[]}function h(){}f.fromJSON=function(e,t){return t||(t=new f),e.options&&t.setOptions(e.options),t.addJSON(e.nested)},f.prototype.resolvePath=l.path.resolve,f.prototype.fetch=l.fetch,f.prototype.load=function e(t,r,n){"function"==typeof r&&(n=r,r=void 0);var i=this;if(!n)return l.asPromise(e,i,t,r);var u=n===h;function a(e,t){if(n){var r=n;if(n=null,u)throw e;r(e,t)}}function c(e){var t=e.lastIndexOf("google/protobuf/");if(t>-1){var r=e.substring(t);if(r in o)return r}return null}function f(e,t){try{if(l.isString(t)&&"{"===t.charAt(0)&&(t=JSON.parse(t)),l.isString(t)){s.filename=e;var n,o=s(t,i,r),f=0;if(o.imports)for(;f-1))if(i.files.push(e),e in o)u?f(e,o[e]):(++d,setTimeout((function(){--d,f(e,o[e])})));else if(u){var r;try{r=l.fs.readFileSync(e).toString("utf8")}catch(e){return void(t||a(e))}f(e,r)}else++d,i.fetch(e,(function(r,s){--d,n&&(r?t?d||a(null,i):a(r):f(e,s))}))}var d=0;l.isString(t)&&(t=[t]);for(var y,v=0;v-1&&this.deferred.splice(t,1)}}else if(e instanceof a)p.test(e.name)&&delete e.parent[e.name];else if(e instanceof n){for(var r=0;r0)t[i]=e(t[i]||{},r,n);else{var s=t[i];s&&(n=[].concat(s).concat(n)),t[i]=n}return t}(e,t=t.split("."),r)},Object.defineProperty(s,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(r(424)))}})},630:function(e,t,r){e.exports=i;var n=r(693);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var s=i.zero=new i(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var o=i.zeroHash="\0\0\0\0\0\0\0\0";i.fromNumber=function(e){if(0===e)return s;var t=e<0;t&&(e=-e);var r=e>>>0,n=(e-r)/4294967296>>>0;return t&&(n=~n>>>0,r=~r>>>0,++r>4294967295&&(r=0,++n>4294967295&&(n=0))),new i(r,n)},i.from=function(e){if("number"==typeof e)return i.fromNumber(e);if(n.isString(e)){if(!n.Long)return i.fromNumber(parseInt(e,10));e=n.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):s},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,r=~this.hi>>>0;return t||(r=r+1>>>0),-(t+4294967296*r)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return n.Long?new n.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var u=String.prototype.charCodeAt;i.fromHash=function(e){return e===o?s:new i((u.call(e,0)|u.call(e,1)<<8|u.call(e,2)<<16|u.call(e,3)<<24)>>>0,(u.call(e,4)|u.call(e,5)<<8|u.call(e,6)<<16|u.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,r=this.hi>>>24;return 0===r?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:r<128?9:10}},693:function(e,t,r){var n=t;function i(e,t,r){for(var n=Object.keys(t),i=0;i0)},n.Buffer=function(){try{var e=n.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(e){return"number"==typeof e?n.Buffer?n._Buffer_allocUnsafe(e):new n.Array(e):n.Buffer?n._Buffer_from(e):"undefined"==typeof Uint8Array?e:new Uint8Array(e)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(e){return e?n.LongBits.from(e).toHash():n.LongBits.zeroHash},n.longFromHash=function(e,t){var r=n.LongBits.fromHash(e);return n.Long?n.Long.fromBits(r.lo,r.hi,t):r.toNumber(Boolean(t))},n.merge=i,n.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},n.newError=s,n.ProtocolError=s("ProtocolError"),n.oneOfGetter=function(e){for(var t={},r=0;r-1;--r)if(1===t[e[r]]&&void 0!==this[e[r]]&&null!==this[e[r]])return e[r]}},n.oneOfSetter=function(e){return function(t){for(var r=0;r>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=127&e.lo|128,e.lo=e.lo>>>7;t[r++]=e.lo}function v(e,t,r){t[r]=255&e,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}f.create=h(),f.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(f.alloc=i.pool(f.alloc,i.Array.prototype.subarray)),f.prototype._push=function(e,t,r){return this.tail=this.tail.next=new a(e,t,r),this.len+=t,this},d.prototype=Object.create(a.prototype),d.prototype.fn=function(e,t,r){for(;e>127;)t[r++]=127&e|128,e>>>=7;t[r]=e},f.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new d((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},f.prototype.int32=function(e){return e<0?this._push(y,10,s.fromNumber(e)):this.uint32(e)},f.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},f.prototype.uint64=function(e){var t=s.from(e);return this._push(y,t.length(),t)},f.prototype.int64=f.prototype.uint64,f.prototype.sint64=function(e){var t=s.from(e).zzEncode();return this._push(y,t.length(),t)},f.prototype.bool=function(e){return this._push(p,1,e?1:0)},f.prototype.fixed32=function(e){return this._push(v,4,e>>>0)},f.prototype.sfixed32=f.prototype.fixed32,f.prototype.fixed64=function(e){var t=s.from(e);return this._push(v,4,t.lo)._push(v,4,t.hi)},f.prototype.sfixed64=f.prototype.fixed64,f.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},f.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var _=i.Array.prototype.set?function(e,t,r){t.set(e,r)}:function(e,t,r){for(var n=0;n>>0;if(!t)return this._push(p,1,0);if(i.isString(e)){var r=f.alloc(t=o.length(e));o.decode(e,r,0),e=r}return this.uint32(t)._push(_,t,e)},f.prototype.string=function(e){var t=u.length(e);return t?this.uint32(t)._push(u.write,t,e):this._push(p,1,0)},f.prototype.fork=function(){return this.states=new l(this),this.head=this.tail=new a(c,0,0),this.len=0,this},f.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new a(c,0,0),this.len=0),this},f.prototype.ldelim=function(){var e=this.head,t=this.tail,r=this.len;return this.reset().uint32(r),r&&(this.tail.next=e.next,this.tail=t,this.len+=r),this},f.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),r=0;e;)e.fn(e.val,t,r),r+=e.len,e=e.next;return t},f._configure=function(e){n=e,f.create=h(),n._configure()}},155:function(e,t,r){e.exports=s;var n=r(173);(s.prototype=Object.create(n.prototype)).constructor=s;var i=r(693);function s(){n.call(this)}function o(e,t,r){e.length<40?i.utf8.write(e,t,r):t.utf8Write?t.utf8Write(e,r):t.write(e,r)}s._configure=function(){s.alloc=i._Buffer_allocUnsafe,s.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&"set"===i.Buffer.prototype.set.name?function(e,t,r){t.set(e,r)}:function(e,t,r){if(e.copy)e.copy(t,r,0,e.length);else for(var n=0;n>>0;return this.uint32(t),t&&this._push(s.writeBytesBuffer,t,e),this},s.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(o,t,e),this},s._configure()},881:function(e){e.exports=JSON.parse('{"nested":{"centrifugal":{"nested":{"centrifuge":{"nested":{"protocol":{"options":{"go_package":"./;protocol"},"nested":{"Error":{"fields":{"code":{"type":"uint32","id":1},"message":{"type":"string","id":2}}},"Command":{"fields":{"id":{"type":"uint32","id":1},"method":{"type":"MethodType","id":2},"params":{"type":"bytes","id":3}},"nested":{"MethodType":{"values":{"CONNECT":0,"SUBSCRIBE":1,"UNSUBSCRIBE":2,"PUBLISH":3,"PRESENCE":4,"PRESENCE_STATS":5,"HISTORY":6,"PING":7,"SEND":8,"RPC":9,"REFRESH":10,"SUB_REFRESH":11}}}},"Reply":{"fields":{"id":{"type":"uint32","id":1},"error":{"type":"Error","id":2},"result":{"type":"bytes","id":3}}},"Push":{"fields":{"type":{"type":"PushType","id":1},"channel":{"type":"string","id":2},"data":{"type":"bytes","id":3}},"nested":{"PushType":{"values":{"PUBLICATION":0,"JOIN":1,"LEAVE":2,"UNSUBSCRIBE":3,"MESSAGE":4,"SUBSCRIBE":5,"CONNECT":6,"DISCONNECT":7,"REFRESH":8}}}},"ClientInfo":{"fields":{"user":{"type":"string","id":1},"client":{"type":"string","id":2},"conn_info":{"type":"bytes","id":3},"chan_info":{"type":"bytes","id":4}}},"Publication":{"fields":{"data":{"type":"bytes","id":4},"info":{"type":"ClientInfo","id":5},"offset":{"type":"uint64","id":6}}},"Join":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Leave":{"fields":{"info":{"type":"ClientInfo","id":1}}},"Unsubscribe":{"fields":{}},"Subscribe":{"fields":{"recoverable":{"type":"bool","id":1},"epoch":{"type":"string","id":4},"offset":{"type":"uint64","id":5},"positioned":{"type":"bool","id":6},"data":{"type":"bytes","id":7}}},"Message":{"fields":{"data":{"type":"bytes","id":1}}},"Connect":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"data":{"type":"bytes","id":3},"subs":{"keyType":"string","type":"SubscribeResult","id":4},"expires":{"type":"bool","id":5},"ttl":{"type":"uint32","id":6}}},"Disconnect":{"fields":{"code":{"type":"uint32","id":1},"reason":{"type":"string","id":2},"reconnect":{"type":"bool","id":3}}},"Refresh":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"ConnectRequest":{"fields":{"token":{"type":"string","id":1},"data":{"type":"bytes","id":2},"subs":{"keyType":"string","type":"SubscribeRequest","id":3},"name":{"type":"string","id":4},"version":{"type":"string","id":5}}},"ConnectResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4},"data":{"type":"bytes","id":5},"subs":{"keyType":"string","type":"SubscribeResult","id":6}}},"RefreshRequest":{"fields":{"token":{"type":"string","id":1}}},"RefreshResult":{"fields":{"client":{"type":"string","id":1},"version":{"type":"string","id":2},"expires":{"type":"bool","id":3},"ttl":{"type":"uint32","id":4}}},"SubscribeRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2},"recover":{"type":"bool","id":3},"epoch":{"type":"string","id":6},"offset":{"type":"uint64","id":7}}},"SubscribeResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2},"recoverable":{"type":"bool","id":3},"epoch":{"type":"string","id":6},"publications":{"rule":"repeated","type":"Publication","id":7},"recovered":{"type":"bool","id":8},"offset":{"type":"uint64","id":9},"positioned":{"type":"bool","id":10},"data":{"type":"bytes","id":11}}},"SubRefreshRequest":{"fields":{"channel":{"type":"string","id":1},"token":{"type":"string","id":2}}},"SubRefreshResult":{"fields":{"expires":{"type":"bool","id":1},"ttl":{"type":"uint32","id":2}}},"UnsubscribeRequest":{"fields":{"channel":{"type":"string","id":1}}},"UnsubscribeResult":{"fields":{}},"PublishRequest":{"fields":{"channel":{"type":"string","id":1},"data":{"type":"bytes","id":2}}},"PublishResult":{"fields":{}},"PresenceRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceResult":{"fields":{"presence":{"keyType":"string","type":"ClientInfo","id":1}}},"PresenceStatsRequest":{"fields":{"channel":{"type":"string","id":1}}},"PresenceStatsResult":{"fields":{"num_clients":{"type":"uint32","id":1},"num_users":{"type":"uint32","id":2}}},"StreamPosition":{"fields":{"offset":{"type":"uint64","id":1},"epoch":{"type":"string","id":2}}},"HistoryRequest":{"fields":{"channel":{"type":"string","id":1},"limit":{"type":"int32","id":7},"since":{"type":"StreamPosition","id":8},"reverse":{"type":"bool","id":9}}},"HistoryResult":{"fields":{"publications":{"rule":"repeated","type":"Publication","id":1},"epoch":{"type":"string","id":2},"offset":{"type":"uint64","id":3}}},"PingRequest":{"fields":{}},"PingResult":{"fields":{}},"RPCRequest":{"fields":{"data":{"type":"bytes","id":1},"method":{"type":"string","id":2}}},"RPCResult":{"fields":{"data":{"type":"bytes","id":1}}},"SendRequest":{"fields":{"data":{"type":"bytes","id":1}}}}}}}}}}}')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var __webpack_exports__=__webpack_require__(714);return __webpack_exports__}()})); //# sourceMappingURL=centrifuge.protobuf.min.js.map \ No newline at end of file diff --git a/dist/centrifuge.protobuf.min.js.map b/dist/centrifuge.protobuf.min.js.map index 93e18306..bbaefa70 100644 --- a/dist/centrifuge.protobuf.min.js.map +++ b/dist/centrifuge.protobuf.min.js.map @@ -1 +1 @@ -{"version":3,"file":"centrifuge.protobuf.min.js","mappings":"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","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUB) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUB) {\n const sub = this._decoder.decodePushData(this._pushType.SUB, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import {Centrifuge} from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUBSCRIBE: proto.lookupEnum('PushType').values.UNSUBSCRIBE,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUBSCRIBE: proto.lookupEnum('PushType').values.SUBSCRIBE\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUBSCRIBE: proto.lookupType('protocol.Unsubscribe'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUBSCRIBE: proto.lookupType('protocol.Subscribe')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUBSCRIBE:\n type = PushSchema.UNSUBSCRIBE;\n break;\n case protobufPushType.SUBSCRIBE:\n type = PushSchema.SUBSCRIBE;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(714);\n"],"names":["root","factory","exports","module","define","amd","this","fn","ctx","params","Array","arguments","length","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","p","n","charAt","Math","ceil","b64","s64","i","encode","buffer","start","end","t","parts","chunk","j","b","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","undefined","Error","test","codegen","functionParams","functionName","body","Codegen","formatStringOrScope","source","toString","verbose","console","log","scopeKeys","Object","keys","scopeParams","scopeValues","scopeOffset","Function","formatParams","formatOffset","replace","$0","$1","value","Number","floor","JSON","stringify","functionNameOverride","EventEmitter","_listeners","prototype","on","evt","off","listeners","splice","emit","args","fetch","asPromise","fs","inquire","filename","options","callback","xhr","readFile","contents","XMLHttpRequest","binary","onreadystatechange","readyState","status","response","responseText","Uint8Array","overrideMimeType","responseType","open","send","Float32Array","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","moduleName","mod","eval","e","path","isAbsolute","normalize","split","absolute","prefix","shift","originPath","includePath","alreadyNormalized","alloc","size","SIZE","MAX","slab","call","utf8","len","read","write","c1","c2","_errorTimeout","_errorConnectionClosed","Centrifuge","url","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","query","_debug","global","ActiveXObject","hasOwnProperty","encodeURIComponent","headerName","withCredentials","setRequestHeader","parsed","parse","error","_log","setTimeout","WebSocket","format","_formatOverride","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","UNSUB","_handleUnsub","SUB","_handleSub","messages","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","CentrifugeProtobuf","map","filter","r","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","assign","finish","encodeDelimited","ProtobufDecoder","reader","Reader","decodeDelimited","_decode","res","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","errContext","_resolve","_reject","enabled","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","rej","_nextPromiseId","self","publish","presenceStats","history","lastIndexOf","level","logger","step","a","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","addListener","prependListener","prependOnceListener","list","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","converter","Enum","util","genValuePartial_fromObject","field","fieldIndex","prop","resolvedType","repeated","typeDefault","fullName","isUnsigned","genValuePartial_toObject","fromObject","mtype","fields","fieldsArray","safeProp","toObject","sort","compareFieldsById","repeatedFields","mapFields","normalFields","partOf","valuesById","long","low","high","unsigned","toNumber","bytes","arrayDefault","hasKs2","_fieldsArray","group","ref","types","defaults","keyType","basic","packed","rfield","required","missing","wireType","mapKey","genTypePartial","optional","ReflectionObject","constructor","className","Namespace","comment","comments","reserved","json","enm","toJSON","toJSONOptions","keepComments","Boolean","add","isString","isInteger","isReservedId","isReservedName","allow_alias","remove","Field","Type","ruleRe","rule","isObject","toLowerCase","defaultValue","Long","extensionField","declaringField","_packed","getOption","setOption","ifNotSet","resolved","parent","lookupTypeOrEnum","fromNumber","freeze","newBuffer","emptyObject","emptyArray","ctor","d","fieldId","fieldType","fieldRule","decorateType","decorateEnum","fieldName","Type_","build","load","loadSync","encoder","decoder","verifier","OneOf","MapField","Service","Method","Message","wrappers","configure","BufferWriter","BufferReader","rpc","roots","resolvedKeyType","fieldKeyType","fieldValueType","properties","$type","verify","object","requestType","requestStream","responseStream","parsedOptions","resolvedRequestType","resolvedResponseType","arrayToJSON","array","obj","nested","_nestedArray","clearCache","namespace","addJSON","toArray","nestedArray","nestedJson","names","methods","getEnum","prev","setOptions","onAdd","onRemove","isArray","ptr","part","resolveAll","lookup","filterTypes","parentAlreadyChecked","found","lookupService","Service_","Enum_","defineProperties","_handleAdd","_handleRemove","setParsedOption","propName","opt","find","newValue","setProperty","newOpt","Root_","fieldNames","oneof","addFieldsToParent","oneofName","oneOfGetter","oneOfSetter","LongBits","indexOutOfRange","writeLength","create_array","Buffer","isBuffer","readLongVarint","bits","readFixed32_end","readFixed64","_slice","subarray","uint32","int32","sint32","bool","fixed32","sfixed32","float","double","skip","skipType","BufferReader_","merge","int64","uint64","sint64","zzDecode","fixed64","sfixed64","utf8Slice","common","deferred","files","SYNC","resolvePath","sync","getBundledFileName","idx","altname","substring","process","imports","weakImports","queued","weak","readFileSync","isNode","exposeRe","tryHandleExtension","extendedType","sisterField","parse_","common_","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","endedByRPC","_methodsArray","service","inherited","methodsArray","rpcService","methodName","lcFirst","isReserved","q","s","oneofs","extensions","_fieldsById","_oneofsArray","_ctor","fieldsById","oneofsArray","generateConstructor","ctorProperties","setup","wrapper","originalThis","fork","ldelim","typeName","bake","o","safePropBackslashRe","safePropQuoteRe","ucFirst","str","toUpperCase","camelCaseRe","camelCase","decorateRoot","decorateEnumIndex","dst","setProp","prevValue","zero","zzEncode","zeroHash","from","parseInt","fromString","toLong","fromHash","hash","toHash","mask","part0","part1","part2","src","newError","CustomError","captureStackTrace","stack","pool","g","versions","node","window","isFinite","isset","isSet","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","ProtocolError","fieldMap","longs","enums","encoding","allocUnsafe","seenFirstField","invalid","genVerifyKey","genVerifyValue","oneofProp","expected","type_url","substr","Op","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","reset","BufferWriter_","writeStringBuffer","writeBytesBuffer","byteLength","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"centrifuge.protobuf.min.js","mappings":"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","sources":["webpack://Centrifuge/webpack/universalModuleDefinition","webpack://Centrifuge/./node_modules/@protobufjs/aspromise/index.js","webpack://Centrifuge/./node_modules/@protobufjs/base64/index.js","webpack://Centrifuge/./node_modules/@protobufjs/codegen/index.js","webpack://Centrifuge/./node_modules/@protobufjs/eventemitter/index.js","webpack://Centrifuge/./node_modules/@protobufjs/fetch/index.js","webpack://Centrifuge/./node_modules/@protobufjs/float/index.js","webpack://Centrifuge/./node_modules/@protobufjs/inquire/index.js","webpack://Centrifuge/./node_modules/@protobufjs/path/index.js","webpack://Centrifuge/./node_modules/@protobufjs/pool/index.js","webpack://Centrifuge/./node_modules/@protobufjs/utf8/index.js","webpack://Centrifuge/./src/centrifuge.js","webpack://Centrifuge/./src/index_protobuf.js","webpack://Centrifuge/./src/json.js","webpack://Centrifuge/./src/protobuf.js","webpack://Centrifuge/./src/subscription.js","webpack://Centrifuge/./src/utils.js","webpack://Centrifuge/./node_modules/events/events.js","webpack://Centrifuge/./node_modules/protobufjs/light.js","webpack://Centrifuge/./node_modules/protobufjs/src/converter.js","webpack://Centrifuge/./node_modules/protobufjs/src/decoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/encoder.js","webpack://Centrifuge/./node_modules/protobufjs/src/enum.js","webpack://Centrifuge/./node_modules/protobufjs/src/field.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-light.js","webpack://Centrifuge/./node_modules/protobufjs/src/index-minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/mapfield.js","webpack://Centrifuge/./node_modules/protobufjs/src/message.js","webpack://Centrifuge/./node_modules/protobufjs/src/method.js","webpack://Centrifuge/./node_modules/protobufjs/src/namespace.js","webpack://Centrifuge/./node_modules/protobufjs/src/object.js","webpack://Centrifuge/./node_modules/protobufjs/src/oneof.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader.js","webpack://Centrifuge/./node_modules/protobufjs/src/reader_buffer.js","webpack://Centrifuge/./node_modules/protobufjs/src/root.js","webpack://Centrifuge/./node_modules/protobufjs/src/roots.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc.js","webpack://Centrifuge/./node_modules/protobufjs/src/rpc/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/service.js","webpack://Centrifuge/./node_modules/protobufjs/src/type.js","webpack://Centrifuge/./node_modules/protobufjs/src/types.js","webpack://Centrifuge/./node_modules/protobufjs/src/util.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/longbits.js","webpack://Centrifuge/./node_modules/protobufjs/src/util/minimal.js","webpack://Centrifuge/./node_modules/protobufjs/src/verifier.js","webpack://Centrifuge/./node_modules/protobufjs/src/wrappers.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer.js","webpack://Centrifuge/./node_modules/protobufjs/src/writer_buffer.js","webpack://Centrifuge/webpack/bootstrap","webpack://Centrifuge/webpack/runtime/global","webpack://Centrifuge/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Centrifuge\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Centrifuge\"] = factory();\n\telse\n\t\troot[\"Centrifuge\"] = factory();\n})(this, function() {\nreturn ","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n /* istanbul ignore if */\r\n if (typeof functionParams === \"string\") {\r\n functionName = functionParams;\r\n functionParams = undefined;\r\n }\r\n\r\n var body = [];\r\n\r\n /**\r\n * Appends code to the function's body or finishes generation.\r\n * @typedef Codegen\r\n * @type {function}\r\n * @param {string|Object.} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param {...*} [formatParams] Format parameters\r\n * @returns {Codegen|Function} Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\n\r\n function Codegen(formatStringOrScope) {\r\n // note that explicit array handling below makes this ~50% faster\r\n\r\n // finish the function\r\n if (typeof formatStringOrScope !== \"string\") {\r\n var source = toString();\r\n if (codegen.verbose)\r\n console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n source = \"return \" + source;\r\n if (formatStringOrScope) {\r\n var scopeKeys = Object.keys(formatStringOrScope),\r\n scopeParams = new Array(scopeKeys.length + 1),\r\n scopeValues = new Array(scopeKeys.length),\r\n scopeOffset = 0;\r\n while (scopeOffset < scopeKeys.length) {\r\n scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n }\r\n scopeParams[scopeOffset] = source;\r\n return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n }\r\n return Function(source)(); // eslint-disable-line no-new-func\r\n }\r\n\r\n // otherwise append to body\r\n var formatParams = new Array(arguments.length - 1),\r\n formatOffset = 0;\r\n while (formatOffset < formatParams.length)\r\n formatParams[formatOffset] = arguments[++formatOffset];\r\n formatOffset = 0;\r\n formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n var value = formatParams[formatOffset++];\r\n switch ($1) {\r\n case \"d\": case \"f\": return String(Number(value));\r\n case \"i\": return String(Math.floor(value));\r\n case \"j\": return JSON.stringify(value);\r\n case \"s\": return String(value);\r\n }\r\n return \"%\";\r\n });\r\n if (formatOffset !== formatParams.length)\r\n throw Error(\"parameter count mismatch\");\r\n body.push(formatStringOrScope);\r\n return Codegen;\r\n }\r\n\r\n function toString(functionNameOverride) {\r\n return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n \" + body.join(\"\\n \") + \"\\n}\";\r\n }\r\n\r\n Codegen.toString = toString;\r\n return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n inquire = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options)\r\n options = {};\r\n\r\n if (!callback)\r\n return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n if (!options.xhr && fs && fs.readFile)\r\n return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n return err && typeof XMLHttpRequest !== \"undefined\"\r\n ? fetch.xhr(filename, options, callback)\r\n : err\r\n ? callback(err)\r\n : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n });\r\n\r\n // use the XHR version otherwise.\r\n return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n if (xhr.readyState !== 4)\r\n return undefined;\r\n\r\n // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n // reliably distinguished from an actually empty file for security reasons. feel free\r\n // to send a pull request if you are aware of a solution.\r\n if (xhr.status !== 0 && xhr.status !== 200)\r\n return callback(Error(\"status \" + xhr.status));\r\n\r\n // if binary data is expected, make sure that some sort of array is returned, even if\r\n // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n if (options.binary) {\r\n var buffer = xhr.response;\r\n if (!buffer) {\r\n buffer = [];\r\n for (var i = 0; i < xhr.responseText.length; ++i)\r\n buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n }\r\n return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n }\r\n return callback(null, xhr.responseText);\r\n };\r\n\r\n if (options.binary) {\r\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n if (\"overrideMimeType\" in xhr)\r\n xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n xhr.open(\"GET\", filename);\r\n xhr.send();\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n path = path.replace(/\\\\/g, \"/\")\r\n .replace(/\\/{2,}/g, \"/\");\r\n var parts = path.split(\"/\"),\r\n absolute = isAbsolute(path),\r\n prefix = \"\";\r\n if (absolute)\r\n prefix = parts.shift() + \"/\";\r\n for (var i = 0; i < parts.length;) {\r\n if (parts[i] === \"..\") {\r\n if (i > 0 && parts[i - 1] !== \"..\")\r\n parts.splice(--i, 2);\r\n else if (absolute)\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n } else if (parts[i] === \".\")\r\n parts.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n if (!alreadyNormalized)\r\n includePath = normalize(includePath);\r\n if (isAbsolute(includePath))\r\n return includePath;\r\n if (!alreadyNormalized)\r\n originPath = normalize(originPath);\r\n return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","import EventEmitter from 'events';\nimport Subscription from './subscription';\n\nimport {\n JsonEncoder,\n JsonDecoder,\n JsonMethodType,\n JsonPushType\n} from './json';\n\nimport {\n isFunction,\n log,\n startsWith,\n errorExists,\n backoff,\n extend\n} from './utils';\n\nconst _errorTimeout = 'timeout';\nconst _errorConnectionClosed = 'connection closed';\n\nexport class Centrifuge extends EventEmitter {\n\n constructor(url, options) {\n super();\n this._url = url;\n this._websocket = null;\n this._sockjs = null;\n this._isSockjs = false;\n this._xmlhttprequest = null;\n this._binary = false;\n this._methodType = null;\n this._pushType = null;\n this._encoder = null;\n this._decoder = null;\n this._status = 'disconnected';\n this._reconnect = true;\n this._reconnecting = false;\n this._transport = null;\n this._transportName = null;\n this._transportClosed = true;\n this._messageId = 0;\n this._clientID = null;\n this._refreshRequired = false;\n this._subs = {};\n this._serverSubs = {};\n this._lastSeq = {};\n this._lastGen = {};\n this._lastOffset = {};\n this._lastEpoch = {};\n this._messages = [];\n this._isBatching = false;\n this._isSubscribeBatching = false;\n this._privateChannels = {};\n this._numRefreshFailed = 0;\n this._refreshTimeout = null;\n this._pingTimeout = null;\n this._pongTimeout = null;\n this._subRefreshTimeouts = {};\n this._retries = 0;\n this._callbacks = {};\n this._latency = null;\n this._latencyStart = null;\n this._connectData = null;\n this._token = null;\n this._xhrID = 0;\n this._xhrs = {};\n this._dispatchPromise = Promise.resolve();\n this._protocol = '';\n this._config = {\n protocol: '',\n debug: false,\n name: 'js',\n version: '',\n websocket: null,\n sockjs: null,\n xmlhttprequest: null,\n minRetry: 1000,\n maxRetry: 20000,\n timeout: 5000,\n ping: true,\n pingInterval: 25000,\n pongWaitTimeout: 5000,\n privateChannelPrefix: '$',\n onTransportClose: null,\n sockjsServer: null,\n sockjsTimeout: null,\n sockjsTransports: [\n 'websocket',\n 'xdr-streaming',\n 'xhr-streaming',\n 'eventsource',\n 'iframe-eventsource',\n 'iframe-htmlfile',\n 'xdr-polling',\n 'xhr-polling',\n 'iframe-xhr-polling',\n 'jsonp-polling'\n ],\n refreshEndpoint: '/centrifuge/refresh',\n refreshHeaders: {},\n refreshParams: {},\n refreshData: {},\n refreshAttempts: null,\n refreshInterval: 1000,\n onRefreshFailed: null,\n onRefresh: null,\n subscribeEndpoint: '/centrifuge/subscribe',\n subscribeHeaders: {},\n subscribeParams: {},\n subRefreshInterval: 1000,\n onPrivateSubscribe: null,\n disableWithCredentials: false\n };\n this._configure(options);\n }\n\n setToken(token) {\n this._token = token;\n }\n\n setConnectData(data) {\n this._connectData = data;\n }\n\n setRefreshHeaders(headers) {\n this._config.refreshHeaders = headers;\n }\n setRefreshParams(params) {\n this._config.refreshParams = params;\n }\n setRefreshData(data) {\n this._config.refreshData = data;\n }\n\n setSubscribeHeaders(headers) {\n this._config.subscribeHeaders = headers;\n }\n setSubscribeParams(params) {\n this._config.subscribeParams = params;\n }\n\n _ajax(url, params, headers, data, callback) {\n let query = '';\n this._debug('sending AJAX request to', url, 'with data', JSON.stringify(data));\n\n let xhr;\n if (this._xmlhttprequest !== null) {\n // use explicitly passed XMLHttpRequest object.\n xhr = new this._xmlhttprequest();\n } else {\n xhr = (global.XMLHttpRequest ? new global.XMLHttpRequest() : new global.ActiveXObject('Microsoft.XMLHTTP'));\n }\n\n for (const i in params) {\n if (params.hasOwnProperty(i)) {\n if (query.length > 0) {\n query += '&';\n }\n query += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]);\n }\n }\n if (query.length > 0) {\n query = '?' + query;\n }\n xhr.open('POST', url + query, true);\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !this._config.disableWithCredentials;\n }\n\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.setRequestHeader('Content-Type', 'application/json');\n for (const headerName in headers) {\n if (headers.hasOwnProperty(headerName)) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n }\n }\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data, parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback({\n error: 'Invalid JSON. Data was: ' + xhr.responseText,\n status: 200,\n data: null\n });\n }\n if (parsed) { // prevents double execution.\n callback({\n data: data,\n status: 200\n });\n }\n } else {\n this._log('wrong status code in AJAX response', xhr.status);\n callback({\n status: xhr.status,\n data: null\n });\n }\n }\n };\n setTimeout(() => xhr.send(JSON.stringify(data)), 20);\n return xhr;\n };\n\n _log() {\n log('info', arguments);\n };\n\n _debug() {\n if (this._config.debug === true) {\n log('debug', arguments);\n }\n };\n\n _websocketSupported() {\n if (this._config.websocket !== null) {\n return true;\n }\n return !(typeof WebSocket !== 'function' && typeof WebSocket !== 'object');\n };\n\n _setFormat(format) {\n if (this._formatOverride(format)) {\n return;\n }\n if (format === 'protobuf') {\n throw new Error('not implemented by JSON only Centrifuge client – use client with Protobuf');\n }\n this._binary = false;\n this._methodType = JsonMethodType;\n this._pushType = JsonPushType;\n this._encoder = new JsonEncoder();\n this._decoder = new JsonDecoder();\n }\n\n _formatOverride(format) {\n return false;\n }\n\n _configure(configuration) {\n if (!('Promise' in global)) {\n throw new Error('Promise polyfill required');\n }\n\n extend(this._config, configuration || {});\n this._debug('centrifuge config', this._config);\n\n if (!this._url) {\n throw new Error('url required');\n }\n\n const isProtobufURL = startsWith(this._url, 'ws') && this._url.indexOf('format=protobuf') > -1;\n if (isProtobufURL || this._config.protocol === 'protobuf') {\n this._setFormat('protobuf');\n this._protocol = 'protobuf';\n } else {\n if (this._config.protocol !== '' && this._config.protocol !== 'json') {\n throw new Error('unsupported protocol ' + this._config.protocol);\n }\n this._setFormat('json');\n }\n\n if (startsWith(this._url, 'http')) {\n this._debug('client will try to connect to SockJS endpoint');\n if (this._config.sockjs !== null) {\n this._debug('SockJS explicitly provided in options');\n this._sockjs = this._config.sockjs;\n } else {\n if (typeof global.SockJS === 'undefined') {\n throw new Error('SockJS not found, use ws:// in url or include SockJS');\n }\n this._debug('use globally defined SockJS');\n this._sockjs = global.SockJS;\n }\n } else {\n this._debug('client will connect to websocket endpoint');\n }\n\n this._xmlhttprequest = this._config.xmlhttprequest;\n };\n\n _setStatus(newStatus) {\n if (this._status !== newStatus) {\n this._debug('Status', this._status, '->', newStatus);\n this._status = newStatus;\n }\n };\n\n _isDisconnected() {\n return this._status === 'disconnected';\n };\n\n _isConnecting() {\n return this._status === 'connecting';\n };\n\n _isConnected() {\n return this._status === 'connected';\n };\n\n _nextMessageId() {\n return ++this._messageId;\n };\n\n _resetRetry() {\n this._debug('reset retries count to 0');\n this._retries = 0;\n };\n\n _getRetryInterval() {\n const interval = backoff(this._retries, this._config.minRetry, this._config.maxRetry);\n\n this._retries += 1;\n return interval;\n };\n\n _abortInflightXHRs() {\n for (const xhrID in this._xhrs) {\n try {\n this._xhrs[xhrID].abort();\n } catch (e) {\n this._debug('error aborting xhr', e);\n }\n delete this._xhrs[xhrID];\n }\n };\n\n _clearConnectedState(reconnect) {\n this._clientID = null;\n this._stopPing();\n\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject('disconnected') });\n }\n }\n this._callbacks = {};\n\n // fire unsubscribe events\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n\n if (reconnect) {\n if (sub._isSuccess()) {\n sub._triggerUnsubscribe();\n sub._recover = true;\n }\n if (sub._shouldResubscribe()) {\n sub._setSubscribing();\n }\n } else {\n sub._setUnsubscribed();\n }\n }\n }\n\n this._abortInflightXHRs();\n\n // clear refresh timer\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n // clear sub refresh timers\n for (const channel in this._subRefreshTimeouts) {\n if (this._subRefreshTimeouts.hasOwnProperty(channel) && this._subRefreshTimeouts[channel]) {\n this._clearSubRefreshTimeout(channel);\n }\n }\n this._subRefreshTimeouts = {};\n\n if (!this._reconnect) {\n // completely clear subscriptions\n this._subs = {};\n }\n };\n\n _isTransportOpen() {\n if (this._isSockjs) {\n return this._transport &&\n this._transport.transport &&\n this._transport.transport.readyState === this._transport.transport.OPEN;\n }\n return this._transport && this._transport.readyState === this._transport.OPEN;\n };\n\n _transportSend(commands) {\n if (!commands.length) {\n return true;\n }\n\n if (!this._isTransportOpen()) {\n // resolve pending commands with error if transport is not open\n for (let command in commands) {\n let id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(_errorConnectionClosed, 0) });\n }\n return false;\n }\n this._transport.send(this._encoder.encodeCommands(commands));\n return true;\n }\n\n _getSubProtocol() {\n if (!this._protocol) {\n return '';\n }\n return 'centrifuge-' + this._protocol;\n }\n\n _setupTransport() {\n this._isSockjs = false;\n\n // detect transport to use - SockJS or Websocket\n if (this._sockjs !== null) {\n const sockjsOptions = {\n transports: this._config.sockjsTransports\n };\n\n if (this._config.sockjsServer !== null) {\n sockjsOptions.server = this._config.sockjsServer;\n }\n if (this._config.sockjsTimeout !== null) {\n sockjsOptions.timeout = this._config.sockjsTimeout;\n }\n this._isSockjs = true;\n this._transport = new this._sockjs(this._url, null, sockjsOptions);\n } else {\n if (!this._websocketSupported()) {\n this._debug('No Websocket support and no SockJS configured, can not connect');\n return;\n }\n if (this._config.websocket !== null) {\n this._websocket = this._config.websocket;\n } else {\n this._websocket = WebSocket;\n }\n const subProtocol = this._getSubProtocol();\n if (subProtocol !== '') {\n this._transport = new this._websocket(this._url, subProtocol);\n } else {\n this._transport = new this._websocket(this._url);\n }\n if (this._binary === true) {\n this._transport.binaryType = 'arraybuffer';\n }\n }\n\n this._transport.onopen = () => {\n this._transportClosed = false;\n\n if (this._isSockjs) {\n this._transportName = 'sockjs-' + this._transport.transport;\n this._transport.onheartbeat = () => this._restartPing();\n } else {\n this._transportName = 'websocket';\n }\n\n // Can omit method here due to zero value.\n const msg = {\n // method: this._methodType.CONNECT\n };\n\n if (this._token || this._connectData || this._config.name || this._config.version) {\n msg.params = {};\n }\n if (this._token) {\n msg.params.token = this._token;\n }\n if (this._connectData) {\n msg.params.data = this._connectData;\n }\n if (this._config.name) {\n msg.params.name = this._config.name;\n }\n if (this._config.version) {\n msg.params.version = this._config.version;\n }\n\n let subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n let sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].seq || this._serverSubs[channel].gen) {\n if (this._serverSubs[channel].seq) {\n sub['seq'] = this._serverSubs[channel].seq;\n }\n if (this._serverSubs[channel].gen) {\n sub['gen'] = this._serverSubs[channel].gen;\n }\n } else {\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n if (!msg.params) { msg.params = {}; }\n msg.params.subs = subs;\n }\n\n this._latencyStart = new Date();\n this._call(msg).then(resolveCtx => {\n this._connectResponse(this._decoder.decodeCommandResult(this._methodType.CONNECT, resolveCtx.result), hasSubs);\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n const err = rejectCtx.error;\n if (err.code === 109) { // token expired.\n this._refreshRequired = true;\n }\n this._disconnect('connect error', true);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n this._transport.onerror = error => {\n this._debug('transport level error', error);\n };\n\n this._transport.onclose = closeEvent => {\n this._transportClosed = true;\n let reason = _errorConnectionClosed;\n let needReconnect = true;\n\n if (closeEvent && 'reason' in closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n this._debug('reason is an advice object', advice);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n } catch (e) {\n reason = closeEvent.reason;\n this._debug('reason is a plain string', reason);\n }\n }\n\n // onTransportClose callback should be executed every time transport was closed.\n // This can be helpful to catch failed connection events (because our disconnect\n // event only called once and every future attempts to connect do not fire disconnect\n // event again).\n if (this._config.onTransportClose !== null) {\n this._config.onTransportClose({\n event: closeEvent,\n reason: reason,\n reconnect: needReconnect\n });\n }\n\n this._disconnect(reason, needReconnect);\n\n if (this._reconnect === true) {\n this._reconnecting = true;\n const interval = this._getRetryInterval();\n\n this._debug('reconnect after ' + interval + ' milliseconds');\n setTimeout(() => {\n if (this._reconnect === true) {\n if (this._refreshRequired) {\n this._refresh();\n } else {\n this._connect();\n }\n }\n }, interval);\n }\n };\n\n this._transport.onmessage = event => {\n this._dataReceived(event.data);\n };\n };\n\n rpc(data) {\n return this._rpc('', data);\n }\n\n namedRPC(method, data) {\n return this._rpc(method, data);\n }\n\n _rpc(method, data) {\n let params = {\n data: data\n };\n if (method !== '') {\n params.method = method;\n };\n const msg = {\n method: this._methodType.RPC,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return result;\n });\n }\n\n send(data) {\n const msg = {\n method: this._methodType.SEND,\n params: {\n data: data\n }\n };\n\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n\n const sent = this._transportSend([msg]); // can send async message to server without id set\n if (!sent) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n };\n return Promise.resolve({});\n }\n\n _getHistoryParams(channel, options) {\n let params = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n params['since'] = {\n 'offset': options.since.offset\n };\n if (options.since.epoch) {\n params['since']['epoch'] = options.since.epoch;\n }\n };\n if (options.limit !== undefined) {\n params['limit'] = options.limit;\n }\n if (options.reverse === true) {\n params['reverse'] = true;\n }\n };\n return params;\n }\n\n _methodCall(msg, resultCB) {\n if (!this.isConnected()) {\n return Promise.reject(this._createErrorObject(_errorConnectionClosed, 0));\n }\n return new Promise((resolve, reject) => {\n this._call(msg).then(resolveCtx => {\n resolve(resultCB(this._decoder.decodeCommandResult(msg.method, resolveCtx.result)));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n\n publish(channel, data) {\n const msg = {\n method: this._methodType.PUBLISH,\n params: {\n channel: channel,\n data: data\n }\n };\n return this._methodCall(msg, function () {\n return {};\n });\n }\n\n history(channel, options) {\n const params = this._getHistoryParams(channel, options);\n const msg = {\n method: this._methodType.HISTORY,\n params: params\n };\n return this._methodCall(msg, function (result) {\n return {\n 'publications': result.publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n }\n\n presence(channel) {\n const msg = {\n method: this._methodType.PRESENCE,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'presence': result.presence\n };\n });\n }\n\n presenceStats(channel) {\n const msg = {\n method: this._methodType.PRESENCE_STATS,\n params: {\n channel: channel\n }\n };\n return this._methodCall(msg, function (result) {\n return {\n 'num_users': result.num_users,\n 'num_clients': result.num_clients\n };\n });\n }\n\n _dataReceived(data) {\n const replies = this._decoder.decodeReplies(data);\n // we have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n this._restartPing();\n }\n\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n\n _dispatchReply(reply) {\n var next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n\n const id = reply.id;\n\n if (id && id > 0) {\n this._handleReply(reply, next);\n } else {\n this._handlePush(reply.result, next);\n }\n\n return p;\n };\n\n _call(msg) {\n return new Promise((resolve, reject) => {\n const id = this._addMessage(msg);\n this._registerCall(id, resolve, reject);\n });\n }\n\n _connect() {\n if (this.isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._status === 'connecting') {\n return;\n }\n\n this._debug('start connecting');\n this._setStatus('connecting');\n this._clientID = null;\n this._reconnect = true;\n this._setupTransport();\n };\n\n _disconnect(reason, shouldReconnect) {\n\n const reconnect = shouldReconnect || false;\n if (reconnect === false) {\n this._reconnect = false;\n }\n\n if (this._isDisconnected()) {\n if (!reconnect) {\n this._clearConnectedState(reconnect);\n }\n return;\n }\n\n this._clearConnectedState(reconnect);\n\n this._debug('disconnected:', reason, shouldReconnect);\n this._setStatus('disconnected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._reconnecting === false) {\n // fire unsubscribe events for server side subs.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('unsubscribe', { channel: channel });\n }\n }\n this.emit('disconnect', {\n reason: reason,\n reconnect: reconnect\n });\n }\n\n if (reconnect === false) {\n this._subs = {};\n this._serverSubs = {};\n }\n\n if (!this._transportClosed) {\n this._transport.close();\n }\n };\n\n _refreshFailed() {\n this._numRefreshFailed = 0;\n if (!this._isDisconnected()) {\n this._disconnect('refresh failed', false);\n }\n if (this._config.onRefreshFailed !== null) {\n this._config.onRefreshFailed();\n }\n };\n\n _refresh() {\n // ask application for new connection token.\n this._debug('refresh token');\n\n if (this._config.refreshAttempts === 0) {\n this._debug('refresh attempts set to 0, do not send refresh request at all');\n this._refreshFailed();\n return;\n }\n\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n // We don't perform any connection status related actions here as we are\n // relying on server that must close connection eventually.\n if (resp.error) {\n this._debug('error refreshing connection token', resp.error);\n } else {\n this._debug('error refreshing connection token: wrong status code', resp.status);\n }\n this._numRefreshFailed++;\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (this._config.refreshAttempts !== null && this._numRefreshFailed >= this._config.refreshAttempts) {\n this._refreshFailed();\n return;\n }\n const jitter = Math.round(Math.random() * 1000 * Math.max(this._numRefreshFailed, 20));\n const interval = this._config.refreshInterval + jitter;\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n return;\n }\n this._numRefreshFailed = 0;\n this._token = resp.data.token;\n if (!this._token) {\n this._refreshFailed();\n return;\n }\n if (this._isDisconnected() && this._reconnect) {\n this._debug('token refreshed, connect from scratch');\n this._connect();\n } else {\n this._debug('send refreshed token');\n const msg = {\n method: this._methodType.REFRESH,\n params: {\n token: this._token\n }\n };\n this._call(msg).then(resolveCtx => {\n this._refreshResponse(this._decoder.decodeCommandResult(this._methodType.REFRESH, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n if (this._config.onRefresh !== null) {\n const context = {};\n this._config.onRefresh(context, cb);\n } else {\n const xhr = this._ajax(\n this._config.refreshEndpoint,\n this._config.refreshParams,\n this._config.refreshHeaders,\n this._config.refreshData,\n cb\n );\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _refreshError(err) {\n this._debug('refresh error', err);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n const interval = this._config.refreshInterval + Math.round(Math.random() * 1000);\n this._refreshTimeout = setTimeout(() => this._refresh(), interval);\n }\n\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._clientID = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n };\n\n _newXHRID() {\n this._xhrID++;\n return this._xhrID;\n }\n\n _subRefresh(channel) {\n this._debug('refresh subscription token for channel', channel);\n\n if (this._subRefreshTimeouts[channel] !== undefined) {\n this._clearSubRefreshTimeout(channel);\n } else {\n return;\n }\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (resp.error || resp.status !== 200 || this._clientID !== clientID) {\n return;\n }\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n const token = channelsData[channel];\n if (!token) {\n return;\n }\n const msg = {\n method: this._methodType.SUB_REFRESH,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n\n this._call(msg).then(resolveCtx => {\n this._subRefreshResponse(\n channel,\n this._decoder.decodeCommandResult(this._methodType.SUB_REFRESH, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subRefreshError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n const data = {\n client: this._clientID,\n channels: [channel]\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _clearSubRefreshTimeout(channel) {\n if (this._subRefreshTimeouts[channel] !== undefined) {\n clearTimeout(this._subRefreshTimeouts[channel]);\n delete this._subRefreshTimeouts[channel];\n }\n }\n\n _subRefreshError(channel, err) {\n this._debug('subscription refresh error', channel, err);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n const jitter = Math.round(Math.random() * 1000);\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._config.subRefreshInterval + jitter);\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n return;\n }\n\n _subRefreshResponse(channel, result) {\n this._debug('subscription refresh success', channel);\n this._clearSubRefreshTimeout(channel);\n const sub = this._getSub(channel);\n if (sub === null) {\n return;\n }\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n return;\n };\n\n _subscribe(sub, isResubscribe) {\n this._debug('subscribing on', sub.channel);\n const channel = sub.channel;\n\n if (!(channel in this._subs)) {\n this._subs[channel] = sub;\n }\n\n if (!this.isConnected()) {\n // subscribe will be called later\n sub._setNew();\n return;\n }\n\n sub._setSubscribing(isResubscribe);\n\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel\n }\n };\n\n // If channel name does not start with privateChannelPrefix - then we\n // can just send subscription message to Centrifuge. If channel name\n // starts with privateChannelPrefix - then this is a private channel\n // and we should ask web application backend for permission first.\n if (startsWith(channel, this._config.privateChannelPrefix)) {\n // private channel.\n if (this._isSubscribeBatching) {\n this._privateChannels[channel] = true;\n } else {\n this.startSubscribeBatching();\n this._subscribe(sub);\n this.stopSubscribeBatching();\n }\n } else {\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n };\n\n _unsubscribe(sub) {\n delete this._subs[sub.channel];\n delete this._lastOffset[sub.channel];\n delete this._lastSeq[sub.channel];\n delete this._lastGen[sub.channel];\n if (this.isConnected()) {\n // No need to unsubscribe in disconnected state - i.e. client already unsubscribed.\n this._addMessage({\n method: this._methodType.UNSUBSCRIBE,\n params: {\n channel: sub.channel\n }\n });\n }\n };\n\n _getTTLMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n }\n\n getSub(channel) {\n return this._getSub(channel);\n }\n\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n };\n\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n };\n\n _connectResponse(result, isRecover) {\n const wasReconnecting = this._reconnecting;\n this._reconnecting = false;\n this._resetRetry();\n this._refreshRequired = false;\n\n if (this.isConnected()) {\n return;\n }\n\n if (this._latencyStart !== null) {\n this._latency = (new Date()).getTime() - this._latencyStart.getTime();\n this._latencyStart = null;\n }\n\n this._clientID = result.client;\n this._setStatus('connected');\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getTTLMilliseconds(result.ttl));\n }\n\n this.startBatching();\n this.startSubscribeBatching();\n for (const channel in this._subs) {\n if (this._subs.hasOwnProperty(channel)) {\n const sub = this._subs[channel];\n if (sub._shouldResubscribe()) {\n this._subscribe(sub, wasReconnecting);\n }\n }\n }\n this.stopSubscribeBatching();\n this.stopBatching();\n\n this._startPing();\n\n const ctx = {\n client: result.client,\n transport: this._transportName,\n latency: this._latency\n };\n if (result.data) {\n ctx.data = result.data;\n }\n\n this.emit('connect', ctx);\n\n if (result.subs) {\n this._processServerSubs(result.subs);\n }\n };\n\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n const isResubscribe = this._serverSubs[channel] !== undefined;\n let subCtx = { channel: channel, isResubscribe: isResubscribe };\n subCtx = this._expandSubscribeContext(subCtx, sub);\n this.emit('subscribe', subCtx);\n }\n }\n for (const channel in subs) {\n if (subs.hasOwnProperty(channel)) {\n const sub = subs[channel];\n if (sub.recovered) {\n let pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n\n // handle legacy order.\n // TODO: remove as soon as Centrifuge v1 released.\n if (pubs.length > 1 && (!pubs[0].offset || pubs[0].offset > pubs[1].offset)) {\n pubs = pubs.reverse();\n }\n\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n }\n }\n };\n\n _stopPing() {\n if (this._pongTimeout !== null) {\n clearTimeout(this._pongTimeout);\n this._pongTimeout = null;\n }\n if (this._pingTimeout !== null) {\n clearTimeout(this._pingTimeout);\n this._pingTimeout = null;\n }\n };\n\n _startPing() {\n if (this._config.ping !== true || this._config.pingInterval <= 0) {\n return;\n }\n if (!this.isConnected()) {\n return;\n }\n\n this._pingTimeout = setTimeout(() => {\n if (!this.isConnected()) {\n this._stopPing();\n return;\n }\n this.ping();\n this._pongTimeout = setTimeout(() => {\n this._disconnect('no ping', true);\n }, this._config.pongWaitTimeout);\n }, this._config.pingInterval);\n };\n\n _restartPing() {\n this._stopPing();\n this._startPing();\n };\n\n _subscribeError(channel, error) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n if (error.code === 0 && error.message === _errorTimeout) { // client side timeout.\n this._disconnect('timeout', true);\n return;\n }\n sub._setSubscribeError(error);\n };\n\n _expandSubscribeContext(ctx, result) {\n let recovered = false;\n if ('recovered' in result) {\n recovered = result.recovered;\n }\n ctx.recovered = recovered;\n\n let positioned = false;\n if ('positioned' in result) {\n positioned = result.positioned;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (positioned) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n };\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n\n _subscribeResponse(channel, isRecover, result) {\n const sub = this._getSub(channel);\n if (!sub) {\n return;\n }\n if (!sub._isSubscribing()) {\n return;\n }\n sub._setSubscribeSuccess(result);\n\n let pubs = result.publications;\n if (pubs && pubs.length > 0) {\n if (pubs.length >= 2 && !pubs[0].offset && !pubs[1].offset) {\n // handle legacy order.\n pubs = pubs.reverse();\n }\n for (let i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n\n if (result.recoverable && (!isRecover || !result.recovered)) {\n this._lastSeq[channel] = result.seq || 0;\n this._lastGen[channel] = result.gen || 0;\n this._lastOffset[channel] = result.offset || 0;\n }\n\n this._lastEpoch[channel] = result.epoch || '';\n\n if (result.recoverable) {\n sub._recoverable = true;\n }\n\n if (result.expires === true) {\n let subRefreshTimeout = setTimeout(() => this._subRefresh(channel), this._getTTLMilliseconds(result.ttl));\n this._subRefreshTimeouts[channel] = subRefreshTimeout;\n }\n };\n\n _handleReply(reply, next) {\n const id = reply.id;\n const result = reply.result;\n\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ result, next });\n } else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n\n _handleJoin(channel, join) {\n const ctx = { 'info': join.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('join', ctx);\n }\n return;\n }\n sub.emit('join', ctx);\n };\n\n _handleLeave(channel, leave) {\n const ctx = { 'info': leave.info };\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n ctx.channel = channel;\n this.emit('leave', ctx);\n }\n return;\n }\n sub.emit('leave', ctx);\n };\n\n _handleUnsub(channel, unsub) {\n const ctx = {};\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n ctx.channel = channel;\n this.emit('unsubscribe', ctx);\n }\n return;\n }\n sub.unsubscribe();\n if (unsub.resubscribe === true) {\n sub.subscribe();\n }\n };\n\n _handleSub(channel, sub) {\n this._serverSubs[channel] = {\n 'seq': sub.seq,\n 'gen': sub.gen,\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable\n };\n let ctx = { 'channel': channel, isResubscribe: false };\n ctx = this._expandSubscribeContext(ctx, sub);\n this.emit('subscribe', ctx);\n };\n\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n const ctx = {\n 'data': pub.data,\n 'seq': pub.seq,\n 'gen': pub.gen,\n 'offset': pub.offset\n };\n if (pub.info) {\n ctx.info = pub.info;\n }\n if (!sub) {\n if (this._isServerSub(channel)) {\n if (pub.seq !== undefined) {\n this._serverSubs[channel].seq = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._serverSubs[channel].gen = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n ctx.channel = channel;\n this.emit('publish', ctx);\n }\n return;\n }\n if (pub.seq !== undefined) {\n this._lastSeq[channel] = pub.seq;\n }\n if (pub.gen !== undefined) {\n this._lastGen[channel] = pub.gen;\n }\n if (pub.offset !== undefined) {\n this._lastOffset[channel] = pub.offset;\n }\n sub.emit('publish', ctx);\n };\n\n _handleMessage(message) {\n this.emit('message', message.data);\n };\n\n _handlePush(data, next) {\n const push = this._decoder.decodePush(data);\n let type = 0;\n if ('type' in push) {\n type = push['type'];\n }\n const channel = push.channel;\n\n if (type === this._pushType.PUBLICATION) {\n const pub = this._decoder.decodePushData(this._pushType.PUBLICATION, push.data);\n this._handlePublication(channel, pub);\n } else if (type === this._pushType.MESSAGE) {\n const message = this._decoder.decodePushData(this._pushType.MESSAGE, push.data);\n this._handleMessage(message);\n } else if (type === this._pushType.JOIN) {\n const join = this._decoder.decodePushData(this._pushType.JOIN, push.data);\n this._handleJoin(channel, join);\n } else if (type === this._pushType.LEAVE) {\n const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data);\n this._handleLeave(channel, leave);\n } else if (type === this._pushType.UNSUBSCRIBE) {\n const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleUnsub(channel, unsub);\n } else if (type === this._pushType.SUBSCRIBE) {\n const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data);\n this._handleSub(channel, sub);\n }\n next();\n }\n\n _flush() {\n const messages = this._messages.slice(0);\n this._messages = [];\n this._transportSend(messages);\n };\n\n _ping() {\n const msg = {\n method: this._methodType.PING\n };\n this._call(msg).then(resolveCtx => {\n this._pingResponse(this._decoder.decodeCommandResult(this._methodType.PING, resolveCtx.result));\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._debug('ping error', rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n };\n\n _pingResponse(result) {\n if (!this.isConnected()) {\n return;\n }\n this._stopPing();\n this._startPing();\n }\n\n _getLastSeq(channel) {\n const lastSeq = this._lastSeq[channel];\n if (lastSeq) {\n return lastSeq;\n }\n return 0;\n };\n\n _getLastOffset(channel) {\n const lastOffset = this._lastOffset[channel];\n if (lastOffset) {\n return lastOffset;\n }\n return 0;\n };\n\n _getLastGen(channel) {\n const lastGen = this._lastGen[channel];\n if (lastGen) {\n return lastGen;\n }\n return 0;\n };\n\n _getLastEpoch(channel) {\n const lastEpoch = this._lastEpoch[channel];\n if (lastEpoch) {\n return lastEpoch;\n }\n return '';\n };\n\n _createErrorObject(message, code) {\n const errObject = {\n message: message,\n code: code || 0\n };\n\n return errObject;\n };\n\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(_errorTimeout) });\n }\n }, this._config.timeout);\n };\n\n _addMessage(message) {\n let id = this._nextMessageId();\n message.id = id;\n if (this._isBatching === true) {\n this._messages.push(message);\n } else {\n this._transportSend([message]);\n }\n return id;\n };\n\n isConnected() {\n return this._isConnected();\n }\n\n connect() {\n this._connect();\n };\n\n disconnect() {\n this._disconnect('client', false);\n };\n\n ping() {\n return this._ping();\n }\n\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._isBatching = true;\n };\n\n stopBatching() {\n this._isBatching = false;\n this._flush();\n };\n\n startSubscribeBatching() {\n // start collecting private channels to create bulk authentication\n // request to subscribeEndpoint when stopSubscribeBatching will be called\n this._isSubscribeBatching = true;\n };\n\n stopSubscribeBatching() {\n // create request to subscribeEndpoint with collected private channels\n // to ask if this client can subscribe on each channel\n this._isSubscribeBatching = false;\n const authChannels = this._privateChannels;\n this._privateChannels = {};\n\n const channels = [];\n\n for (const channel in authChannels) {\n if (authChannels.hasOwnProperty(channel)) {\n const sub = this._getSub(channel);\n if (!sub) {\n continue;\n }\n channels.push(channel);\n }\n }\n\n if (channels.length === 0) {\n this._debug('no private channels found, no need to make request');\n return;\n }\n\n const data = {\n client: this._clientID,\n channels: channels\n };\n\n const clientID = this._clientID;\n const xhrID = this._newXHRID();\n\n const cb = (resp) => {\n if (xhrID in this._xhrs) {\n delete this._xhrs[xhrID];\n }\n if (this._clientID !== clientID) {\n return;\n }\n if (resp.error || resp.status !== 200) {\n this._debug('authorization request failed');\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n this._subscribeError(channel, this._createErrorObject('authorization request failed'));\n }\n }\n return;\n }\n\n let channelsData = {};\n if (resp.data.channels) {\n for (const i in resp.data.channels) {\n const channelData = resp.data.channels[i];\n if (!channelData.channel) {\n continue;\n }\n channelsData[channelData.channel] = channelData.token;\n }\n }\n\n // try to send all subscriptions in one request.\n let batch = false;\n\n if (!this._isBatching) {\n this.startBatching();\n batch = true;\n }\n\n for (const i in channels) {\n if (channels.hasOwnProperty(i)) {\n const channel = channels[i];\n const token = channelsData[channel];\n\n if (!token) {\n // subscription:error\n this._subscribeError(channel, this._createErrorObject('permission denied', 103));\n continue;\n } else {\n const msg = {\n method: this._methodType.SUBSCRIBE,\n params: {\n channel: channel,\n token: token\n }\n };\n\n const sub = this._getSub(channel);\n if (sub === null) {\n continue;\n }\n\n const recover = sub._needRecover();\n\n if (recover === true) {\n msg.params.recover = true;\n const seq = this._getLastSeq(channel);\n const gen = this._getLastGen(channel);\n if (seq || gen) {\n if (seq) {\n msg.params.seq = seq;\n }\n if (gen) {\n msg.params.gen = gen;\n }\n } else {\n const offset = this._getLastOffset(channel);\n if (offset) {\n msg.params.offset = offset;\n }\n }\n const epoch = this._getLastEpoch(channel);\n if (epoch) {\n msg.params.epoch = epoch;\n }\n }\n this._call(msg).then(resolveCtx => {\n this._subscribeResponse(\n channel,\n recover,\n this._decoder.decodeCommandResult(this._methodType.SUBSCRIBE, resolveCtx.result)\n );\n if (resolveCtx.next) {\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._subscribeError(channel, rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }\n }\n }\n\n if (batch) {\n this.stopBatching();\n }\n\n };\n\n if (this._config.onPrivateSubscribe !== null) {\n this._config.onPrivateSubscribe({\n data: data\n }, cb);\n } else {\n const xhr = this._ajax(\n this._config.subscribeEndpoint, this._config.subscribeParams, this._config.subscribeHeaders, data, cb);\n this._xhrs[xhrID] = xhr;\n }\n };\n\n _setSubscribeSince(sub, since) {\n this._lastOffset[sub.channel] = since.offset;\n this._lastEpoch[sub.channel] = since.epoch;\n sub._setNeedRecover(true);\n }\n\n subscribe(channel, events, opts) {\n const currentSub = this._getSub(channel);\n if (currentSub !== null) {\n currentSub._setEvents(events);\n if (currentSub._isUnsubscribed()) {\n currentSub.subscribe();\n }\n return currentSub;\n }\n const sub = new Subscription(this, channel, events);\n this._subs[channel] = sub;\n if (opts && opts.since) {\n this._setSubscribeSince(sub, opts.since);\n }\n sub.subscribe();\n return sub;\n };\n}\n","import {CentrifugeProtobuf} from './protobuf.js';\nexport default CentrifugeProtobuf;\n","export const JsonMethodType = {\n CONNECT: 0,\n SUBSCRIBE: 1,\n UNSUBSCRIBE: 2,\n PUBLISH: 3,\n PRESENCE: 4,\n PRESENCE_STATS: 5,\n HISTORY: 6,\n PING: 7,\n SEND: 8,\n RPC: 9,\n REFRESH: 10,\n SUB_REFRESH: 11\n};\n\nexport const JsonPushType = {\n PUBLICATION: 0,\n JOIN: 1,\n LEAVE: 2,\n UNSUBSCRIBE: 3,\n MESSAGE: 4,\n SUBSCRIBE: 5\n};\n\nexport class JsonEncoder {\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n}\n\nexport class JsonDecoder {\n decodeReplies(data) {\n return data.split('\\n').filter(r => r !== '').map(r => JSON.parse(r));\n }\n\n decodeCommandResult(methodType, data) {\n return data;\n }\n\n decodePush(data) {\n return data;\n }\n\n decodePushData(pushType, data) {\n return data;\n }\n}\n\n","import { Centrifuge } from './centrifuge.js';\n\nconst protobuf = require('protobufjs/light');\nconst proto = protobuf.Root.fromJSON(require('./client.proto.json'));\n\nconst methodValues = proto.lookupEnum('MethodType').values;\n\nconst protobufMethodType = {\n CONNECT: methodValues.CONNECT,\n SUBSCRIBE: methodValues.SUBSCRIBE,\n UNSUBSCRIBE: methodValues.UNSUBSCRIBE,\n PUBLISH: methodValues.PUBLISH,\n PRESENCE: methodValues.PRESENCE,\n PRESENCE_STATS: methodValues.PRESENCE_STATS,\n HISTORY: methodValues.HISTORY,\n PING: methodValues.PING,\n RPC: methodValues.RPC,\n SEND: methodValues.SEND,\n REFRESH: methodValues.REFRESH,\n SUB_REFRESH: methodValues.SUB_REFRESH\n};\n\nconst methodSchema = {\n CONNECT: [\n proto.lookupType('protocol.ConnectRequest'),\n proto.lookupType('protocol.ConnectResult')\n ],\n REFRESH: [\n proto.lookupType('protocol.RefreshRequest'),\n proto.lookupType('protocol.RefreshResult')\n ],\n SUBSCRIBE: [\n proto.lookupType('protocol.SubscribeRequest'),\n proto.lookupType('protocol.SubscribeResult')\n ],\n SUB_REFRESH: [\n proto.lookupType('protocol.SubRefreshRequest'),\n proto.lookupType('protocol.SubRefreshResult')\n ],\n UNSUBSCRIBE: [\n proto.lookupType('protocol.UnsubscribeRequest'),\n proto.lookupType('protocol.UnsubscribeResult')\n ],\n PUBLISH: [\n proto.lookupType('protocol.PublishRequest'),\n proto.lookupType('protocol.PublishResult')\n ],\n PRESENCE: [\n proto.lookupType('protocol.PresenceRequest'),\n proto.lookupType('protocol.PresenceResult')\n ],\n PRESENCE_STATS: [\n proto.lookupType('protocol.PresenceStatsRequest'),\n proto.lookupType('protocol.PresenceStatsResult')\n ],\n HISTORY: [\n proto.lookupType('protocol.HistoryRequest'),\n proto.lookupType('protocol.HistoryResult')\n ],\n PING: [\n proto.lookupType('protocol.PingRequest'),\n proto.lookupType('protocol.PingResult')\n ],\n RPC: [\n proto.lookupType('protocol.RPCRequest'),\n proto.lookupType('protocol.RPCResult')\n ],\n SEND: [\n proto.lookupType('protocol.SendRequest'),\n null\n ]\n};\n\nconst protobufPushType = {\n PUBLICATION: proto.lookupEnum('PushType').values.PUBLICATION,\n JOIN: proto.lookupEnum('PushType').values.JOIN,\n LEAVE: proto.lookupEnum('PushType').values.LEAVE,\n UNSUBSCRIBE: proto.lookupEnum('PushType').values.UNSUBSCRIBE,\n MESSAGE: proto.lookupEnum('PushType').values.MESSAGE,\n SUBSCRIBE: proto.lookupEnum('PushType').values.SUBSCRIBE\n};\n\nconst PushSchema = {\n PUBLICATION: proto.lookupType('protocol.Publication'),\n JOIN: proto.lookupType('protocol.Join'),\n LEAVE: proto.lookupType('protocol.Leave'),\n UNSUBSCRIBE: proto.lookupType('protocol.Unsubscribe'),\n MESSAGE: proto.lookupType('protocol.Message'),\n SUBSCRIBE: proto.lookupType('protocol.Subscribe')\n};\n\nconst Push = proto.lookupType('protocol.Push');\nconst Command = proto.lookupType('protocol.Command');\nconst Reply = proto.lookupType('protocol.Reply');\n\nexport class ProtobufEncoder {\n encodeCommands(commands) {\n const writer = protobuf.Writer.create();\n for (const i in commands) {\n if (commands.hasOwnProperty(i)) {\n const command = Object.assign({}, commands[i]);\n if (command.params) {\n let type;\n if (!command.method) {\n command.method = protobufMethodType.CONNECT;\n };\n switch (command.method) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[0];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[0];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[0];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[0];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[0];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[0];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[0];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[0];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[0];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[0];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[0];\n break;\n case protobufMethodType.SEND:\n type = methodSchema.SEND[0];\n break;\n }\n command.params = type.encode(command.params).finish();\n }\n Command.encodeDelimited(command, writer);\n }\n }\n return writer.finish();\n }\n}\n\nexport class ProtobufDecoder {\n decodeReplies(data) {\n const replies = [];\n const reader = protobuf.Reader.create(new Uint8Array(data));\n while (reader.pos < reader.len) {\n const reply = Reply.decodeDelimited(reader);\n replies.push(reply);\n }\n return replies;\n }\n\n decodeCommandResult(methodType, data) {\n var type;\n switch (methodType) {\n case protobufMethodType.CONNECT:\n type = methodSchema.CONNECT[1];\n break;\n case protobufMethodType.REFRESH:\n type = methodSchema.REFRESH[1];\n break;\n case protobufMethodType.SUBSCRIBE:\n type = methodSchema.SUBSCRIBE[1];\n break;\n case protobufMethodType.SUB_REFRESH:\n type = methodSchema.SUB_REFRESH[1];\n break;\n case protobufMethodType.UNSUBSCRIBE:\n type = methodSchema.UNSUBSCRIBE[1];\n break;\n case protobufMethodType.PUBLISH:\n type = methodSchema.PUBLISH[1];\n break;\n case protobufMethodType.PRESENCE:\n type = methodSchema.PRESENCE[1];\n break;\n case protobufMethodType.PRESENCE_STATS:\n type = methodSchema.PRESENCE_STATS[1];\n break;\n case protobufMethodType.HISTORY:\n type = methodSchema.HISTORY[1];\n break;\n case protobufMethodType.PING:\n type = methodSchema.PING[1];\n break;\n case protobufMethodType.RPC:\n type = methodSchema.RPC[1];\n break;\n }\n return this._decode(type, data);\n }\n\n decodePush(data) {\n return this._decode(Push, data);\n }\n\n decodePushData(pushType, data) {\n var type;\n switch (pushType) {\n case protobufPushType.PUBLICATION:\n type = PushSchema.PUBLICATION;\n break;\n case protobufPushType.MESSAGE:\n type = PushSchema.MESSAGE;\n break;\n case protobufPushType.JOIN:\n type = PushSchema.JOIN;\n break;\n case protobufPushType.LEAVE:\n type = PushSchema.LEAVE;\n break;\n case protobufPushType.UNSUBSCRIBE:\n type = PushSchema.UNSUBSCRIBE;\n break;\n case protobufPushType.SUBSCRIBE:\n type = PushSchema.SUBSCRIBE;\n break;\n }\n return this._decode(type, data);\n }\n\n _decode(type, data) {\n let res;\n try {\n res = type.decode(data);\n } catch (err) {\n return null;\n }\n return res;\n }\n}\n\nexport class CentrifugeProtobuf extends Centrifuge {\n _formatOverride(format) {\n if (format === 'protobuf') {\n this._binary = true;\n this._methodType = protobufMethodType;\n this._pushType = protobufPushType;\n this._encoder = new ProtobufEncoder();\n this._decoder = new ProtobufDecoder();\n return true;\n }\n return false;\n }\n}\n","import EventEmitter from 'events';\n\nimport {\n isFunction\n} from './utils';\n\nconst _STATE_NEW = 0;\nconst _STATE_SUBSCRIBING = 1;\nconst _STATE_SUCCESS = 2;\nconst _STATE_ERROR = 3;\nconst _STATE_UNSUBSCRIBED = 4;\n\nexport default class Subscription extends EventEmitter {\n constructor(centrifuge, channel, events) {\n super();\n this.channel = channel;\n this._centrifuge = centrifuge;\n this._status = _STATE_NEW;\n this._error = null;\n this._isResubscribe = false;\n this._ready = false;\n this._subscriptionPromise = null;\n this._noResubscribe = false;\n this._recoverable = false;\n this._recover = false;\n this._setEvents(events);\n this._initializePromise();\n this._promises = {};\n this._promiseId = 0;\n this.on('error', function (errContext) {\n this._centrifuge._debug('subscription error', errContext);\n });\n }\n\n _nextPromiseId() {\n return ++this._promiseId;\n }\n\n _initializePromise() {\n // this helps us to wait until subscription will successfully\n // subscribe and call actions such as presence, history etc in\n // synchronous way.\n this._ready = false;\n\n this._subscriptionPromise = new Promise((resolve, reject) => {\n this._resolve = value => {\n this._ready = true;\n resolve(value);\n };\n this._reject = err => {\n this._ready = true;\n reject(err);\n };\n }).then(function () {}, function () {});\n };\n\n _setNeedRecover(enabled) {\n this._recoverable = enabled;\n this._recover = enabled;\n }\n\n _needRecover() {\n return this._recoverable === true && this._recover === true;\n };\n\n _setEvents(events) {\n if (!events) {\n return;\n }\n if (isFunction(events)) {\n // events is just a function to handle publication received from channel.\n this.on('publish', events);\n } else if (Object.prototype.toString.call(events) === Object.prototype.toString.call({})) {\n const knownEvents = ['publish', 'join', 'leave', 'unsubscribe', 'subscribe', 'error'];\n for (let i = 0, l = knownEvents.length; i < l; i++) {\n const ev = knownEvents[i];\n if (ev in events) {\n this.on(ev, events[ev]);\n }\n }\n }\n };\n\n _isNew() {\n return this._status === _STATE_NEW;\n };\n\n _isUnsubscribed() {\n return this._status === _STATE_UNSUBSCRIBED;\n };\n\n _isSubscribing() {\n return this._status === _STATE_SUBSCRIBING;\n };\n\n _isReady() {\n return this._status === _STATE_SUCCESS || this._status === _STATE_ERROR;\n };\n\n _isSuccess() {\n return this._status === _STATE_SUCCESS;\n };\n\n _isError() {\n return this._status === _STATE_ERROR;\n };\n\n _setNew() {\n this._status = _STATE_NEW;\n };\n\n _setSubscribing(isResubscribe) {\n this._isResubscribe = isResubscribe || false;\n if (this._ready === true) {\n // new promise for this subscription\n this._initializePromise();\n }\n this._status = _STATE_SUBSCRIBING;\n };\n\n _setSubscribeSuccess(subscribeResult) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._status = _STATE_SUCCESS;\n const successContext = this._getSubscribeSuccessContext(subscribeResult);\n this._recover = false;\n this.emit('subscribe', successContext);\n this._resolve(successContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].resolve();\n delete this._promises[id];\n }\n };\n\n _setSubscribeError(err) {\n if (this._status === _STATE_ERROR) {\n return;\n }\n this._status = _STATE_ERROR;\n this._error = err;\n const errContext = this._getSubscribeErrorContext();\n this.emit('error', errContext);\n this._reject(errContext);\n for (const id in this._promises) {\n clearTimeout(this._promises[id].timeout);\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n };\n\n _triggerUnsubscribe() {\n this.emit('unsubscribe', {\n channel: this.channel\n });\n };\n\n _setUnsubscribed(noResubscribe) {\n this._centrifuge._clearSubRefreshTimeout(this.channel);\n if (this._status === _STATE_UNSUBSCRIBED) {\n return;\n }\n const needTrigger = this._status === _STATE_SUCCESS;\n this._status = _STATE_UNSUBSCRIBED;\n if (noResubscribe === true) {\n this._recover = false;\n this._noResubscribe = true;\n delete this._centrifuge._lastSeq[this.channel];\n delete this._centrifuge._lastGen[this.channel];\n delete this._centrifuge._lastEpoch[this.channel];\n }\n if (needTrigger) {\n this._triggerUnsubscribe();\n }\n };\n\n _shouldResubscribe() {\n return !this._noResubscribe;\n };\n\n _getSubscribeSuccessContext(subscribeResult) {\n let ctx = {\n channel: this.channel,\n isResubscribe: this._isResubscribe\n };\n if (subscribeResult) {\n // subscribeResult not available when called from Subscription.ready method at the moment.\n ctx = this._centrifuge._expandSubscribeContext(ctx, subscribeResult);\n }\n return ctx;\n };\n\n _getSubscribeErrorContext() {\n const subscribeErrorContext = this._error;\n subscribeErrorContext.channel = this.channel;\n subscribeErrorContext.isResubscribe = this._isResubscribe;\n return subscribeErrorContext;\n };\n\n ready(callback, errback) {\n if (this._ready) {\n if (this._isSuccess()) {\n callback(this._getSubscribeSuccessContext());\n } else {\n errback(this._getSubscribeErrorContext());\n }\n }\n };\n\n subscribe(opts) {\n if (this._status === _STATE_SUCCESS) {\n return;\n }\n this._noResubscribe = false;\n if (opts && opts.since) {\n this._centrifuge._setSubscribeSince(this, opts.since);\n }\n this._centrifuge._subscribe(this);\n };\n\n unsubscribe() {\n this._setUnsubscribed(true);\n this._centrifuge._unsubscribe(this);\n };\n\n _methodCall() {\n if (this._isSuccess()) {\n return Promise.resolve();\n } else if (this._isError()) {\n return Promise.reject(this._error);\n }\n let subPromise = new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({'code': 0, 'message': 'timeout'});\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n return subPromise;\n }\n\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n };\n\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n };\n\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n };\n\n history(options) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, options);\n });\n };\n}\n","export function startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n};\n\nexport function isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n};\n\nexport function log(level, args) {\n if (global.console) {\n const logger = global.console[level];\n\n if (isFunction(logger)) {\n logger.apply(global.console, args);\n }\n }\n};\n\nexport function backoff(step, min, max) {\n const jitter = 0.5 * Math.random();\n const interval = Math.min(max, min * Math.pow(2, step + 1));\n\n return Math.floor((1 - jitter) * interval);\n};\n\nexport function errorExists(data) {\n return 'error' in data && data.error !== null;\n};\n\nexport function extend(a, b) {\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// light library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-light\");","\"use strict\";\n/**\n * Runtime message from/to plain object converters.\n * @namespace\n */\nvar converter = exports;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\n/**\n * Generates a partial value fromObject conveter.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} prop Property reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genValuePartial_fromObject(gen, field, fieldIndex, prop) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(d%s){\", prop);\n for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {\n if (field.repeated && values[keys[i]] === field.typeDefault) gen\n (\"default:\");\n gen\n (\"case%j:\", keys[i])\n (\"case %i:\", values[keys[i]])\n (\"m%s=%j\", prop, values[keys[i]])\n (\"break\");\n } gen\n (\"}\");\n } else gen\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s=types[%i].fromObject(d%s)\", prop, fieldIndex, prop);\n } else {\n var isUnsigned = false;\n switch (field.type) {\n case \"double\":\n case \"float\": gen\n (\"m%s=Number(d%s)\", prop, prop); // also catches \"NaN\", \"Infinity\"\n break;\n case \"uint32\":\n case \"fixed32\": gen\n (\"m%s=d%s>>>0\", prop, prop);\n break;\n case \"int32\":\n case \"sint32\":\n case \"sfixed32\": gen\n (\"m%s=d%s|0\", prop, prop);\n break;\n case \"uint64\":\n isUnsigned = true;\n // eslint-disable-line no-fallthrough\n case \"int64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(util.Long)\")\n (\"(m%s=util.Long.fromValue(d%s)).unsigned=%j\", prop, prop, isUnsigned)\n (\"else if(typeof d%s===\\\"string\\\")\", prop)\n (\"m%s=parseInt(d%s,10)\", prop, prop)\n (\"else if(typeof d%s===\\\"number\\\")\", prop)\n (\"m%s=d%s\", prop, prop)\n (\"else if(typeof d%s===\\\"object\\\")\", prop)\n (\"m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)\", prop, prop, prop, isUnsigned ? \"true\" : \"\");\n break;\n case \"bytes\": gen\n (\"if(typeof d%s===\\\"string\\\")\", prop)\n (\"util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)\", prop, prop, prop)\n (\"else if(d%s.length)\", prop)\n (\"m%s=d%s\", prop, prop);\n break;\n case \"string\": gen\n (\"m%s=String(d%s)\", prop, prop);\n break;\n case \"bool\": gen\n (\"m%s=Boolean(d%s)\", prop, prop);\n break;\n /* default: gen\n (\"m%s=d%s\", prop, prop);\n break; */\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a plain object to runtime message converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.fromObject = function fromObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray;\n var gen = util.codegen([\"d\"], mtype.name + \"$fromObject\")\n (\"if(d instanceof this.ctor)\")\n (\"return d\");\n if (!fields.length) return gen\n (\"return new this.ctor\");\n gen\n (\"var m=new this.ctor\");\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n prop = util.safeProp(field.name);\n\n // Map fields\n if (field.map) { gen\n (\"if(d%s){\", prop)\n (\"if(typeof d%s!==\\\"object\\\")\", prop)\n (\"throw TypeError(%j)\", field.fullName + \": object expected\")\n (\"m%s={}\", prop)\n (\"for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s\", prop, prop, prop, prop, isUnsigned ? \"true\": \"\", prop);\n break;\n case \"bytes\": gen\n (\"d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s\", prop, prop, prop, prop, prop);\n break;\n default: gen\n (\"d%s=m%s\", prop, prop);\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n\n/**\n * Generates a runtime message to plain object converter specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nconverter.toObject = function toObject(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);\n if (!fields.length)\n return util.codegen()(\"return {}\");\n var gen = util.codegen([\"m\", \"o\"], mtype.name + \"$toObject\")\n (\"if(!o)\")\n (\"o={}\")\n (\"var d={}\");\n\n var repeatedFields = [],\n mapFields = [],\n normalFields = [],\n i = 0;\n for (; i < fields.length; ++i)\n if (!fields[i].partOf)\n ( fields[i].resolve().repeated ? repeatedFields\n : fields[i].map ? mapFields\n : normalFields).push(fields[i]);\n\n if (repeatedFields.length) { gen\n (\"if(o.arrays||o.defaults){\");\n for (i = 0; i < repeatedFields.length; ++i) gen\n (\"d%s=[]\", util.safeProp(repeatedFields[i].name));\n gen\n (\"}\");\n }\n\n if (mapFields.length) { gen\n (\"if(o.objects||o.defaults){\");\n for (i = 0; i < mapFields.length; ++i) gen\n (\"d%s={}\", util.safeProp(mapFields[i].name));\n gen\n (\"}\");\n }\n\n if (normalFields.length) { gen\n (\"if(o.defaults){\");\n for (i = 0; i < normalFields.length; ++i) {\n var field = normalFields[i],\n prop = util.safeProp(field.name);\n if (field.resolvedType instanceof Enum) gen\n (\"d%s=o.enums===String?%j:%j\", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);\n else if (field.long) gen\n (\"if(util.Long){\")\n (\"var n=new util.Long(%i,%i,%j)\", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)\n (\"d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n\", prop)\n (\"}else\")\n (\"d%s=o.longs===String?%j:%i\", prop, field.typeDefault.toString(), field.typeDefault.toNumber());\n else if (field.bytes) {\n var arrayDefault = \"[\" + Array.prototype.slice.call(field.typeDefault).join(\",\") + \"]\";\n gen\n (\"if(o.bytes===String)d%s=%j\", prop, String.fromCharCode.apply(String, field.typeDefault))\n (\"else{\")\n (\"d%s=%s\", prop, arrayDefault)\n (\"if(o.bytes!==Array)d%s=util.newBuffer(d%s)\", prop, prop)\n (\"}\");\n } else gen\n (\"d%s=%j\", prop, field.typeDefault); // also messages (=null)\n } gen\n (\"}\");\n }\n var hasKs2 = false;\n for (i = 0; i < fields.length; ++i) {\n var field = fields[i],\n index = mtype._fieldsArray.indexOf(field),\n prop = util.safeProp(field.name);\n if (field.map) {\n if (!hasKs2) { hasKs2 = true; gen\n (\"var ks2\");\n } gen\n (\"if(m%s&&(ks2=Object.keys(m%s)).length){\", prop, prop)\n (\"d%s={}\", prop)\n (\"for(var j=0;j>>3){\");\n\n var i = 0;\n for (; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n ref = \"m\" + util.safeProp(field.name); gen\n (\"case %i:\", field.id);\n\n // Map fields\n if (field.map) { gen\n (\"if(%s===util.emptyObject)\", ref)\n (\"%s={}\", ref)\n (\"var c2 = r.uint32()+r.pos\");\n\n if (types.defaults[field.keyType] !== undefined) gen\n (\"k=%j\", types.defaults[field.keyType]);\n else gen\n (\"k=null\");\n\n if (types.defaults[type] !== undefined) gen\n (\"value=%j\", types.defaults[type]);\n else gen\n (\"value=null\");\n\n gen\n (\"while(r.pos>>3){\")\n (\"case 1: k=r.%s(); break\", field.keyType)\n (\"case 2:\");\n\n if (types.basic[type] === undefined) gen\n (\"value=types[%i].decode(r,r.uint32())\", i); // can't be groups\n else gen\n (\"value=r.%s()\", type);\n\n gen\n (\"break\")\n (\"default:\")\n (\"r.skipType(tag2&7)\")\n (\"break\")\n (\"}\")\n (\"}\");\n\n if (types.long[field.keyType] !== undefined) gen\n (\"%s[typeof k===\\\"object\\\"?util.longToHash(k):k]=value\", ref);\n else gen\n (\"%s[k]=value\", ref);\n\n // Repeated fields\n } else if (field.repeated) { gen\n\n (\"if(!(%s&&%s.length))\", ref, ref)\n (\"%s=[]\", ref);\n\n // Packable (always check for forward and backward compatiblity)\n if (types.packed[type] !== undefined) gen\n (\"if((t&7)===2){\")\n (\"var c2=r.uint32()+r.pos\")\n (\"while(r.pos>> 0, (field.id << 3 | 4) >>> 0)\n : gen(\"types[%i].encode(%s,w.uint32(%i).fork()).ldelim()\", fieldIndex, ref, (field.id << 3 | 2) >>> 0);\n}\n\n/**\n * Generates an encoder specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction encoder(mtype) {\n /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */\n var gen = util.codegen([\"m\", \"w\"], mtype.name + \"$encode\")\n (\"if(!w)\")\n (\"w=Writer.create()\");\n\n var i, ref;\n\n // \"when a message is serialized its known fields should be written sequentially by field number\"\n var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);\n\n for (var i = 0; i < fields.length; ++i) {\n var field = fields[i].resolve(),\n index = mtype._fieldsArray.indexOf(field),\n type = field.resolvedType instanceof Enum ? \"int32\" : field.type,\n wireType = types.basic[type];\n ref = \"m\" + util.safeProp(field.name);\n\n // Map fields\n if (field.map) {\n gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j)){\", ref, field.name) // !== undefined && !== null\n (\"for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType);\n if (wireType === undefined) gen\n (\"types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()\", index, ref); // can't be groups\n else gen\n (\".uint32(%i).%s(%s[ks[i]]).ldelim()\", 16 | wireType, type, ref);\n gen\n (\"}\")\n (\"}\");\n\n // Repeated fields\n } else if (field.repeated) { gen\n (\"if(%s!=null&&%s.length){\", ref, ref); // !== undefined && !== null\n\n // Packed repeated\n if (field.packed && types.packed[type] !== undefined) { gen\n\n (\"w.uint32(%i).fork()\", (field.id << 3 | 2) >>> 0)\n (\"for(var i=0;i<%s.length;++i)\", ref)\n (\"w.%s(%s[i])\", type, ref)\n (\"w.ldelim()\");\n\n // Non-packed\n } else { gen\n\n (\"for(var i=0;i<%s.length;++i)\", ref);\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref + \"[i]\");\n else gen\n (\"w.uint32(%i).%s(%s[i])\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n } gen\n (\"}\");\n\n // Non-repeated\n } else {\n if (field.optional) gen\n (\"if(%s!=null&&Object.hasOwnProperty.call(m,%j))\", ref, field.name); // !== undefined && !== null\n\n if (wireType === undefined)\n genTypePartial(gen, field, index, ref);\n else gen\n (\"w.uint32(%i).%s(%s)\", (field.id << 3 | wireType) >>> 0, type, ref);\n\n }\n }\n\n return gen\n (\"return w\");\n /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */\n}\n","\"use strict\";\nmodule.exports = Enum;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = \"Enum\";\n\nvar Namespace = require(\"./namespace\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new enum instance.\n * @classdesc Reflected enum.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {Object.} [values] Enum values as an object, by name\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this enum\n * @param {Object.} [comments] The value comments for this enum\n */\nfunction Enum(name, values, options, comment, comments) {\n ReflectionObject.call(this, name, options);\n\n if (values && typeof values !== \"object\")\n throw TypeError(\"values must be an object\");\n\n /**\n * Enum values by id.\n * @type {Object.}\n */\n this.valuesById = {};\n\n /**\n * Enum values by name.\n * @type {Object.}\n */\n this.values = Object.create(this.valuesById); // toJSON, marker\n\n /**\n * Enum comment text.\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Value comment texts, if any.\n * @type {Object.}\n */\n this.comments = comments || {};\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n // Note that values inherit valuesById on their prototype which makes them a TypeScript-\n // compatible enum. This is used by pbts to write actual enum definitions that work for\n // static and reflection code alike instead of emitting generic object definitions.\n\n if (values)\n for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)\n if (typeof values[keys[i]] === \"number\") // use forward entries only\n this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];\n}\n\n/**\n * Enum descriptor.\n * @interface IEnum\n * @property {Object.} values Enum values\n * @property {Object.} [options] Enum options\n */\n\n/**\n * Constructs an enum from an enum descriptor.\n * @param {string} name Enum name\n * @param {IEnum} json Enum descriptor\n * @returns {Enum} Created enum\n * @throws {TypeError} If arguments are invalid\n */\nEnum.fromJSON = function fromJSON(name, json) {\n var enm = new Enum(name, json.values, json.options, json.comment, json.comments);\n enm.reserved = json.reserved;\n return enm;\n};\n\n/**\n * Converts this enum to an enum descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IEnum} Enum descriptor\n */\nEnum.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"values\" , this.values,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"comment\" , keepComments ? this.comment : undefined,\n \"comments\" , keepComments ? this.comments : undefined\n ]);\n};\n\n/**\n * Adds a value to this enum.\n * @param {string} name Value name\n * @param {number} id Value id\n * @param {string} [comment] Comment, if any\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a value with this name or id\n */\nEnum.prototype.add = function add(name, id, comment) {\n // utilized by the parser but not by .fromJSON\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (!util.isInteger(id))\n throw TypeError(\"id must be an integer\");\n\n if (this.values[name] !== undefined)\n throw Error(\"duplicate name '\" + name + \"' in \" + this);\n\n if (this.isReservedId(id))\n throw Error(\"id \" + id + \" is reserved in \" + this);\n\n if (this.isReservedName(name))\n throw Error(\"name '\" + name + \"' is reserved in \" + this);\n\n if (this.valuesById[id] !== undefined) {\n if (!(this.options && this.options.allow_alias))\n throw Error(\"duplicate id \" + id + \" in \" + this);\n this.values[name] = id;\n } else\n this.valuesById[this.values[name] = id] = name;\n\n this.comments[name] = comment || null;\n return this;\n};\n\n/**\n * Removes a value from this enum\n * @param {string} name Value name\n * @returns {Enum} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `name` is not a name of this enum\n */\nEnum.prototype.remove = function remove(name) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n var val = this.values[name];\n if (val == null)\n throw Error(\"name '\" + name + \"' does not exist in \" + this);\n\n delete this.valuesById[val];\n delete this.values[name];\n delete this.comments[name];\n\n return this;\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nEnum.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n","\"use strict\";\nmodule.exports = Field;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = \"Field\";\n\nvar Enum = require(\"./enum\"),\n types = require(\"./types\"),\n util = require(\"./util\");\n\nvar Type; // cyclic\n\nvar ruleRe = /^required|optional|repeated$/;\n\n/**\n * Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.\n * @name Field\n * @classdesc Reflected message field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a field from a field descriptor.\n * @param {string} name Field name\n * @param {IField} json Field descriptor\n * @returns {Field} Created field\n * @throws {TypeError} If arguments are invalid\n */\nField.fromJSON = function fromJSON(name, json) {\n return new Field(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);\n};\n\n/**\n * Not an actual constructor. Use {@link Field} instead.\n * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports FieldBase\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} type Value type\n * @param {string|Object.} [rule=\"optional\"] Field rule\n * @param {string|Object.} [extend] Extended type if different from parent\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction Field(name, id, type, rule, extend, options, comment) {\n\n if (util.isObject(rule)) {\n comment = extend;\n options = rule;\n rule = extend = undefined;\n } else if (util.isObject(extend)) {\n comment = options;\n options = extend;\n extend = undefined;\n }\n\n ReflectionObject.call(this, name, options);\n\n if (!util.isInteger(id) || id < 0)\n throw TypeError(\"id must be a non-negative integer\");\n\n if (!util.isString(type))\n throw TypeError(\"type must be a string\");\n\n if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase()))\n throw TypeError(\"rule must be a string rule\");\n\n if (extend !== undefined && !util.isString(extend))\n throw TypeError(\"extend must be a string\");\n\n /**\n * Field rule, if any.\n * @type {string|undefined}\n */\n this.rule = rule && rule !== \"optional\" ? rule : undefined; // toJSON\n\n /**\n * Field type.\n * @type {string}\n */\n this.type = type; // toJSON\n\n /**\n * Unique field id.\n * @type {number}\n */\n this.id = id; // toJSON, marker\n\n /**\n * Extended type if different from parent.\n * @type {string|undefined}\n */\n this.extend = extend || undefined; // toJSON\n\n /**\n * Whether this field is required.\n * @type {boolean}\n */\n this.required = rule === \"required\";\n\n /**\n * Whether this field is optional.\n * @type {boolean}\n */\n this.optional = !this.required;\n\n /**\n * Whether this field is repeated.\n * @type {boolean}\n */\n this.repeated = rule === \"repeated\";\n\n /**\n * Whether this field is a map or not.\n * @type {boolean}\n */\n this.map = false;\n\n /**\n * Message this field belongs to.\n * @type {Type|null}\n */\n this.message = null;\n\n /**\n * OneOf this field belongs to, if any,\n * @type {OneOf|null}\n */\n this.partOf = null;\n\n /**\n * The field type's default value.\n * @type {*}\n */\n this.typeDefault = null;\n\n /**\n * The field's default value on prototypes.\n * @type {*}\n */\n this.defaultValue = null;\n\n /**\n * Whether this field's value should be treated as a long.\n * @type {boolean}\n */\n this.long = util.Long ? types.long[type] !== undefined : /* istanbul ignore next */ false;\n\n /**\n * Whether this field's value is a buffer.\n * @type {boolean}\n */\n this.bytes = type === \"bytes\";\n\n /**\n * Resolved type if not a basic type.\n * @type {Type|Enum|null}\n */\n this.resolvedType = null;\n\n /**\n * Sister-field within the extended type if a declaring extension field.\n * @type {Field|null}\n */\n this.extensionField = null;\n\n /**\n * Sister-field within the declaring namespace if an extended field.\n * @type {Field|null}\n */\n this.declaringField = null;\n\n /**\n * Internally remembers whether this field is packed.\n * @type {boolean|null}\n * @private\n */\n this._packed = null;\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Determines whether this field is packed. Only relevant when repeated and working with proto2.\n * @name Field#packed\n * @type {boolean}\n * @readonly\n */\nObject.defineProperty(Field.prototype, \"packed\", {\n get: function() {\n // defaults to packed=true if not explicity set to false\n if (this._packed === null)\n this._packed = this.getOption(\"packed\") !== false;\n return this._packed;\n }\n});\n\n/**\n * @override\n */\nField.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (name === \"packed\") // clear cached before setting\n this._packed = null;\n return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet);\n};\n\n/**\n * Field descriptor.\n * @interface IField\n * @property {string} [rule=\"optional\"] Field rule\n * @property {string} type Field type\n * @property {number} id Field id\n * @property {Object.} [options] Field options\n */\n\n/**\n * Extension field descriptor.\n * @interface IExtensionField\n * @extends IField\n * @property {string} extend Extended type\n */\n\n/**\n * Converts this field to a field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IField} Field descriptor\n */\nField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"rule\" , this.rule !== \"optional\" && this.rule || undefined,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Resolves this field's type references.\n * @returns {Field} `this`\n * @throws {Error} If any reference cannot be resolved\n */\nField.prototype.resolve = function resolve() {\n\n if (this.resolved)\n return this;\n\n if ((this.typeDefault = types.defaults[this.type]) === undefined) { // if not a basic type, resolve it\n this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);\n if (this.resolvedType instanceof Type)\n this.typeDefault = null;\n else // instanceof Enum\n this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; // first defined\n }\n\n // use explicitly set default value if present\n if (this.options && this.options[\"default\"] != null) {\n this.typeDefault = this.options[\"default\"];\n if (this.resolvedType instanceof Enum && typeof this.typeDefault === \"string\")\n this.typeDefault = this.resolvedType.values[this.typeDefault];\n }\n\n // remove unnecessary options\n if (this.options) {\n if (this.options.packed === true || this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum))\n delete this.options.packed;\n if (!Object.keys(this.options).length)\n this.options = undefined;\n }\n\n // convert to internal data type if necesssary\n if (this.long) {\n this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === \"u\");\n\n /* istanbul ignore else */\n if (Object.freeze)\n Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)\n\n } else if (this.bytes && typeof this.typeDefault === \"string\") {\n var buf;\n if (util.base64.test(this.typeDefault))\n util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);\n else\n util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);\n this.typeDefault = buf;\n }\n\n // take special care of maps and repeated fields\n if (this.map)\n this.defaultValue = util.emptyObject;\n else if (this.repeated)\n this.defaultValue = util.emptyArray;\n else\n this.defaultValue = this.typeDefault;\n\n // ensure proper value on prototype\n if (this.parent instanceof Type)\n this.parent.ctor.prototype[this.name] = this.defaultValue;\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n\n/**\n * Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).\n * @typedef FieldDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} fieldName Field name\n * @returns {undefined}\n */\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"string\"|\"bool\"|\"bytes\"|Object} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @param {T} [defaultValue] Default value\n * @returns {FieldDecorator} Decorator function\n * @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]\n */\nField.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {\n\n // submessage: decorate the submessage and use its name as the type\n if (typeof fieldType === \"function\")\n fieldType = util.decorateType(fieldType).name;\n\n // enum reference: create a reflected copy of the enum and keep reuseing it\n else if (fieldType && typeof fieldType === \"object\")\n fieldType = util.decorateEnum(fieldType).name;\n\n return function fieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new Field(fieldName, fieldId, fieldType, fieldRule, { \"default\": defaultValue }));\n };\n};\n\n/**\n * Field decorator (TypeScript).\n * @name Field.d\n * @function\n * @param {number} fieldId Field id\n * @param {Constructor|string} fieldType Field type\n * @param {\"optional\"|\"required\"|\"repeated\"} [fieldRule=\"optional\"] Field rule\n * @returns {FieldDecorator} Decorator function\n * @template T extends Message\n * @variation 2\n */\n// like Field.d but without a default value\n\n// Sets up cyclic dependencies (called in index-light)\nField._configure = function configure(Type_) {\n Type = Type_;\n};\n","\"use strict\";\nvar protobuf = module.exports = require(\"./index-minimal\");\n\nprotobuf.build = \"light\";\n\n/**\n * A node-style callback as used by {@link load} and {@link Root#load}.\n * @typedef LoadCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Root} [root] Root, if there hasn't been an error\n * @returns {undefined}\n */\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} root Root namespace, defaults to create a new one if omitted.\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n */\nfunction load(filename, root, callback) {\n if (typeof root === \"function\") {\n callback = root;\n root = new protobuf.Root();\n } else if (!root)\n root = new protobuf.Root();\n return root.load(filename, callback);\n}\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @see {@link Root#load}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.\n * @name load\n * @function\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Promise} Promise\n * @see {@link Root#load}\n * @variation 3\n */\n// function load(filename:string, [root:Root]):Promise\n\nprotobuf.load = load;\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).\n * @param {string|string[]} filename One or multiple files to load\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n * @see {@link Root#loadSync}\n */\nfunction loadSync(filename, root) {\n if (!root)\n root = new protobuf.Root();\n return root.loadSync(filename);\n}\n\nprotobuf.loadSync = loadSync;\n\n// Serialization\nprotobuf.encoder = require(\"./encoder\");\nprotobuf.decoder = require(\"./decoder\");\nprotobuf.verifier = require(\"./verifier\");\nprotobuf.converter = require(\"./converter\");\n\n// Reflection\nprotobuf.ReflectionObject = require(\"./object\");\nprotobuf.Namespace = require(\"./namespace\");\nprotobuf.Root = require(\"./root\");\nprotobuf.Enum = require(\"./enum\");\nprotobuf.Type = require(\"./type\");\nprotobuf.Field = require(\"./field\");\nprotobuf.OneOf = require(\"./oneof\");\nprotobuf.MapField = require(\"./mapfield\");\nprotobuf.Service = require(\"./service\");\nprotobuf.Method = require(\"./method\");\n\n// Runtime\nprotobuf.Message = require(\"./message\");\nprotobuf.wrappers = require(\"./wrappers\");\n\n// Utility\nprotobuf.types = require(\"./types\");\nprotobuf.util = require(\"./util\");\n\n// Set up possibly cyclic reflection dependencies\nprotobuf.ReflectionObject._configure(protobuf.Root);\nprotobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);\nprotobuf.Root._configure(protobuf.Type);\nprotobuf.Field._configure(protobuf.Type);\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = MapField;\n\n// extends Field\nvar Field = require(\"./field\");\n((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = \"MapField\";\n\nvar types = require(\"./types\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new map field instance.\n * @classdesc Reflected map field.\n * @extends FieldBase\n * @constructor\n * @param {string} name Unique name within its namespace\n * @param {number} id Unique id within its namespace\n * @param {string} keyType Key type\n * @param {string} type Value type\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction MapField(name, id, keyType, type, options, comment) {\n Field.call(this, name, id, type, undefined, undefined, options, comment);\n\n /* istanbul ignore if */\n if (!util.isString(keyType))\n throw TypeError(\"keyType must be a string\");\n\n /**\n * Key type.\n * @type {string}\n */\n this.keyType = keyType; // toJSON, marker\n\n /**\n * Resolved key type if not a basic type.\n * @type {ReflectionObject|null}\n */\n this.resolvedKeyType = null;\n\n // Overrides Field#map\n this.map = true;\n}\n\n/**\n * Map field descriptor.\n * @interface IMapField\n * @extends {IField}\n * @property {string} keyType Key type\n */\n\n/**\n * Extension map field descriptor.\n * @interface IExtensionMapField\n * @extends IMapField\n * @property {string} extend Extended type\n */\n\n/**\n * Constructs a map field from a map field descriptor.\n * @param {string} name Field name\n * @param {IMapField} json Map field descriptor\n * @returns {MapField} Created map field\n * @throws {TypeError} If arguments are invalid\n */\nMapField.fromJSON = function fromJSON(name, json) {\n return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);\n};\n\n/**\n * Converts this map field to a map field descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMapField} Map field descriptor\n */\nMapField.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"keyType\" , this.keyType,\n \"type\" , this.type,\n \"id\" , this.id,\n \"extend\" , this.extend,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nMapField.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n\n // Besides a value type, map fields have a key type that may be \"any scalar type except for floating point types and bytes\"\n if (types.mapKey[this.keyType] === undefined)\n throw Error(\"invalid key type: \" + this.keyType);\n\n return Field.prototype.resolve.call(this);\n};\n\n/**\n * Map field decorator (TypeScript).\n * @name MapField.d\n * @function\n * @param {number} fieldId Field id\n * @param {\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"} fieldKeyType Field key type\n * @param {\"double\"|\"float\"|\"int32\"|\"uint32\"|\"sint32\"|\"fixed32\"|\"sfixed32\"|\"int64\"|\"uint64\"|\"sint64\"|\"fixed64\"|\"sfixed64\"|\"bool\"|\"string\"|\"bytes\"|Object|Constructor<{}>} fieldValueType Field value type\n * @returns {FieldDecorator} Decorator function\n * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }\n */\nMapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {\n\n // submessage value: decorate the submessage and use its name as the type\n if (typeof fieldValueType === \"function\")\n fieldValueType = util.decorateType(fieldValueType).name;\n\n // enum reference value: create a reflected copy of the enum and keep reuseing it\n else if (fieldValueType && typeof fieldValueType === \"object\")\n fieldValueType = util.decorateEnum(fieldValueType).name;\n\n return function mapFieldDecorator(prototype, fieldName) {\n util.decorateType(prototype.constructor)\n .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));\n };\n};\n","\"use strict\";\nmodule.exports = Message;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new message instance.\n * @classdesc Abstract runtime message.\n * @constructor\n * @param {Properties} [properties] Properties to set\n * @template T extends object = object\n */\nfunction Message(properties) {\n // not used internally\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n this[keys[i]] = properties[keys[i]];\n}\n\n/**\n * Reference to the reflected type.\n * @name Message.$type\n * @type {Type}\n * @readonly\n */\n\n/**\n * Reference to the reflected type.\n * @name Message#$type\n * @type {Type}\n * @readonly\n */\n\n/*eslint-disable valid-jsdoc*/\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.create = function create(properties) {\n return this.$type.create(properties);\n};\n\n/**\n * Encodes a message of this type.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encode = function encode(message, writer) {\n return this.$type.encode(message, writer);\n};\n\n/**\n * Encodes a message of this type preceeded by its length as a varint.\n * @param {T|Object.} message Message to encode\n * @param {Writer} [writer] Writer to use\n * @returns {Writer} Writer\n * @template T extends Message\n * @this Constructor\n */\nMessage.encodeDelimited = function encodeDelimited(message, writer) {\n return this.$type.encodeDelimited(message, writer);\n};\n\n/**\n * Decodes a message of this type.\n * @name Message.decode\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decode = function decode(reader) {\n return this.$type.decode(reader);\n};\n\n/**\n * Decodes a message of this type preceeded by its length as a varint.\n * @name Message.decodeDelimited\n * @function\n * @param {Reader|Uint8Array} reader Reader or buffer to decode\n * @returns {T} Decoded message\n * @template T extends Message\n * @this Constructor\n */\nMessage.decodeDelimited = function decodeDelimited(reader) {\n return this.$type.decodeDelimited(reader);\n};\n\n/**\n * Verifies a message of this type.\n * @name Message.verify\n * @function\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\nMessage.verify = function verify(message) {\n return this.$type.verify(message);\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object\n * @returns {T} Message instance\n * @template T extends Message\n * @this Constructor\n */\nMessage.fromObject = function fromObject(object) {\n return this.$type.fromObject(object);\n};\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {T} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @template T extends Message\n * @this Constructor\n */\nMessage.toObject = function toObject(message, options) {\n return this.$type.toObject(message, options);\n};\n\n/**\n * Converts this message to JSON.\n * @returns {Object.} JSON object\n */\nMessage.prototype.toJSON = function toJSON() {\n return this.$type.toObject(this, util.toJSONOptions);\n};\n\n/*eslint-enable valid-jsdoc*/","\"use strict\";\nmodule.exports = Method;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = \"Method\";\n\nvar util = require(\"./util\");\n\n/**\n * Constructs a new service method instance.\n * @classdesc Reflected service method.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Method name\n * @param {string|undefined} type Method type, usually `\"rpc\"`\n * @param {string} requestType Request message type\n * @param {string} responseType Response message type\n * @param {boolean|Object.} [requestStream] Whether the request is streamed\n * @param {boolean|Object.} [responseStream] Whether the response is streamed\n * @param {Object.} [options] Declared options\n * @param {string} [comment] The comment for this method\n * @param {Object.} [parsedOptions] Declared options, properly parsed into an object\n */\nfunction Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {\n\n /* istanbul ignore next */\n if (util.isObject(requestStream)) {\n options = requestStream;\n requestStream = responseStream = undefined;\n } else if (util.isObject(responseStream)) {\n options = responseStream;\n responseStream = undefined;\n }\n\n /* istanbul ignore if */\n if (!(type === undefined || util.isString(type)))\n throw TypeError(\"type must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(requestType))\n throw TypeError(\"requestType must be a string\");\n\n /* istanbul ignore if */\n if (!util.isString(responseType))\n throw TypeError(\"responseType must be a string\");\n\n ReflectionObject.call(this, name, options);\n\n /**\n * Method type.\n * @type {string}\n */\n this.type = type || \"rpc\"; // toJSON\n\n /**\n * Request type.\n * @type {string}\n */\n this.requestType = requestType; // toJSON, marker\n\n /**\n * Whether requests are streamed or not.\n * @type {boolean|undefined}\n */\n this.requestStream = requestStream ? true : undefined; // toJSON\n\n /**\n * Response type.\n * @type {string}\n */\n this.responseType = responseType; // toJSON\n\n /**\n * Whether responses are streamed or not.\n * @type {boolean|undefined}\n */\n this.responseStream = responseStream ? true : undefined; // toJSON\n\n /**\n * Resolved request type.\n * @type {Type|null}\n */\n this.resolvedRequestType = null;\n\n /**\n * Resolved response type.\n * @type {Type|null}\n */\n this.resolvedResponseType = null;\n\n /**\n * Comment for this method\n * @type {string|null}\n */\n this.comment = comment;\n\n /**\n * Options properly parsed into an object\n */\n this.parsedOptions = parsedOptions;\n}\n\n/**\n * Method descriptor.\n * @interface IMethod\n * @property {string} [type=\"rpc\"] Method type\n * @property {string} requestType Request type\n * @property {string} responseType Response type\n * @property {boolean} [requestStream=false] Whether requests are streamed\n * @property {boolean} [responseStream=false] Whether responses are streamed\n * @property {Object.} [options] Method options\n * @property {string} comment Method comments\n * @property {Object.} [parsedOptions] Method options properly parsed into an object\n */\n\n/**\n * Constructs a method from a method descriptor.\n * @param {string} name Method name\n * @param {IMethod} json Method descriptor\n * @returns {Method} Created method\n * @throws {TypeError} If arguments are invalid\n */\nMethod.fromJSON = function fromJSON(name, json) {\n return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);\n};\n\n/**\n * Converts this method to a method descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IMethod} Method descriptor\n */\nMethod.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"type\" , this.type !== \"rpc\" && /* istanbul ignore next */ this.type || undefined,\n \"requestType\" , this.requestType,\n \"requestStream\" , this.requestStream,\n \"responseType\" , this.responseType,\n \"responseStream\" , this.responseStream,\n \"options\" , this.options,\n \"comment\" , keepComments ? this.comment : undefined,\n \"parsedOptions\" , this.parsedOptions,\n ]);\n};\n\n/**\n * @override\n */\nMethod.prototype.resolve = function resolve() {\n\n /* istanbul ignore if */\n if (this.resolved)\n return this;\n\n this.resolvedRequestType = this.parent.lookupType(this.requestType);\n this.resolvedResponseType = this.parent.lookupType(this.responseType);\n\n return ReflectionObject.prototype.resolve.call(this);\n};\n","\"use strict\";\nmodule.exports = Namespace;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = \"Namespace\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n Service,\n Enum;\n\n/**\n * Constructs a new namespace instance.\n * @name Namespace\n * @classdesc Reflected namespace.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n */\n\n/**\n * Constructs a namespace from JSON.\n * @memberof Namespace\n * @function\n * @param {string} name Namespace name\n * @param {Object.} json JSON object\n * @returns {Namespace} Created namespace\n * @throws {TypeError} If arguments are invalid\n */\nNamespace.fromJSON = function fromJSON(name, json) {\n return new Namespace(name, json.options).addJSON(json.nested);\n};\n\n/**\n * Converts an array of reflection objects to JSON.\n * @memberof Namespace\n * @param {ReflectionObject[]} array Object array\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {Object.|undefined} JSON object or `undefined` when array is empty\n */\nfunction arrayToJSON(array, toJSONOptions) {\n if (!(array && array.length))\n return undefined;\n var obj = {};\n for (var i = 0; i < array.length; ++i)\n obj[array[i].name] = array[i].toJSON(toJSONOptions);\n return obj;\n}\n\nNamespace.arrayToJSON = arrayToJSON;\n\n/**\n * Tests if the specified id is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedId = function isReservedId(reserved, id) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (typeof reserved[i] !== \"string\" && reserved[i][0] <= id && reserved[i][1] > id)\n return true;\n return false;\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {Array.|undefined} reserved Array of reserved ranges and names\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nNamespace.isReservedName = function isReservedName(reserved, name) {\n if (reserved)\n for (var i = 0; i < reserved.length; ++i)\n if (reserved[i] === name)\n return true;\n return false;\n};\n\n/**\n * Not an actual constructor. Use {@link Namespace} instead.\n * @classdesc Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions.\n * @exports NamespaceBase\n * @extends ReflectionObject\n * @abstract\n * @constructor\n * @param {string} name Namespace name\n * @param {Object.} [options] Declared options\n * @see {@link Namespace}\n */\nfunction Namespace(name, options) {\n ReflectionObject.call(this, name, options);\n\n /**\n * Nested objects by name.\n * @type {Object.|undefined}\n */\n this.nested = undefined; // toJSON\n\n /**\n * Cached nested objects as an array.\n * @type {ReflectionObject[]|null}\n * @private\n */\n this._nestedArray = null;\n}\n\nfunction clearCache(namespace) {\n namespace._nestedArray = null;\n return namespace;\n}\n\n/**\n * Nested objects of this namespace as an array for iteration.\n * @name NamespaceBase#nestedArray\n * @type {ReflectionObject[]}\n * @readonly\n */\nObject.defineProperty(Namespace.prototype, \"nestedArray\", {\n get: function() {\n return this._nestedArray || (this._nestedArray = util.toArray(this.nested));\n }\n});\n\n/**\n * Namespace descriptor.\n * @interface INamespace\n * @property {Object.} [options] Namespace options\n * @property {Object.} [nested] Nested object descriptors\n */\n\n/**\n * Any extension field descriptor.\n * @typedef AnyExtensionField\n * @type {IExtensionField|IExtensionMapField}\n */\n\n/**\n * Any nested object descriptor.\n * @typedef AnyNestedObject\n * @type {IEnum|IType|IService|AnyExtensionField|INamespace}\n */\n// ^ BEWARE: VSCode hangs forever when using more than 5 types (that's why AnyExtensionField exists in the first place)\n\n/**\n * Converts this namespace to a namespace descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {INamespace} Namespace descriptor\n */\nNamespace.prototype.toJSON = function toJSON(toJSONOptions) {\n return util.toObject([\n \"options\" , this.options,\n \"nested\" , arrayToJSON(this.nestedArray, toJSONOptions)\n ]);\n};\n\n/**\n * Adds nested objects to this namespace from nested object descriptors.\n * @param {Object.} nestedJson Any nested object descriptors\n * @returns {Namespace} `this`\n */\nNamespace.prototype.addJSON = function addJSON(nestedJson) {\n var ns = this;\n /* istanbul ignore else */\n if (nestedJson) {\n for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {\n nested = nestedJson[names[i]];\n ns.add( // most to least likely\n ( nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : nested.id !== undefined\n ? Field.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n }\n return this;\n};\n\n/**\n * Gets the nested object of the specified name.\n * @param {string} name Nested object name\n * @returns {ReflectionObject|null} The reflection object or `null` if it doesn't exist\n */\nNamespace.prototype.get = function get(name) {\n return this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Gets the values of the nested {@link Enum|enum} of the specified name.\n * This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.\n * @param {string} name Nested enum name\n * @returns {Object.} Enum values\n * @throws {Error} If there is no such enum\n */\nNamespace.prototype.getEnum = function getEnum(name) {\n if (this.nested && this.nested[name] instanceof Enum)\n return this.nested[name].values;\n throw Error(\"no such enum: \" + name);\n};\n\n/**\n * Adds a nested object to this namespace.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name\n */\nNamespace.prototype.add = function add(object) {\n\n if (!(object instanceof Field && object.extend !== undefined || object instanceof Type || object instanceof Enum || object instanceof Service || object instanceof Namespace))\n throw TypeError(\"object must be a valid nested object\");\n\n if (!this.nested)\n this.nested = {};\n else {\n var prev = this.get(object.name);\n if (prev) {\n if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) {\n // replace plain namespace but keep existing nested elements and options\n var nested = prev.nestedArray;\n for (var i = 0; i < nested.length; ++i)\n object.add(nested[i]);\n this.remove(prev);\n if (!this.nested)\n this.nested = {};\n object.setOptions(prev.options, true);\n\n } else\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n }\n }\n this.nested[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n};\n\n/**\n * Removes a nested object from this namespace.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Namespace} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this namespace\n */\nNamespace.prototype.remove = function remove(object) {\n\n if (!(object instanceof ReflectionObject))\n throw TypeError(\"object must be a ReflectionObject\");\n if (object.parent !== this)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.nested[object.name];\n if (!Object.keys(this.nested).length)\n this.nested = undefined;\n\n object.onRemove(this);\n return clearCache(this);\n};\n\n/**\n * Defines additial namespaces within this one if not yet existing.\n * @param {string|string[]} path Path to create\n * @param {*} [json] Nested types to create from JSON\n * @returns {Namespace} Pointer to the last namespace created or `this` if path is empty\n */\nNamespace.prototype.define = function define(path, json) {\n\n if (util.isString(path))\n path = path.split(\".\");\n else if (!Array.isArray(path))\n throw TypeError(\"illegal path\");\n if (path && path.length && path[0] === \"\")\n throw Error(\"path must be relative\");\n\n var ptr = this;\n while (path.length > 0) {\n var part = path.shift();\n if (ptr.nested && ptr.nested[part]) {\n ptr = ptr.nested[part];\n if (!(ptr instanceof Namespace))\n throw Error(\"path conflicts with non-namespace objects\");\n } else\n ptr.add(ptr = new Namespace(part));\n }\n if (json)\n ptr.addJSON(json);\n return ptr;\n};\n\n/**\n * Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.\n * @returns {Namespace} `this`\n */\nNamespace.prototype.resolveAll = function resolveAll() {\n var nested = this.nestedArray, i = 0;\n while (i < nested.length)\n if (nested[i] instanceof Namespace)\n nested[i++].resolveAll();\n else\n nested[i++].resolve();\n return this.resolve();\n};\n\n/**\n * Recursively looks up the reflection object matching the specified path in the scope of this namespace.\n * @param {string|string[]} path Path to look up\n * @param {*|Array.<*>} filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.\n * @param {boolean} [parentAlreadyChecked=false] If known, whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n */\nNamespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {\n\n /* istanbul ignore next */\n if (typeof filterTypes === \"boolean\") {\n parentAlreadyChecked = filterTypes;\n filterTypes = undefined;\n } else if (filterTypes && !Array.isArray(filterTypes))\n filterTypes = [ filterTypes ];\n\n if (util.isString(path) && path.length) {\n if (path === \".\")\n return this.root;\n path = path.split(\".\");\n } else if (!path.length)\n return this;\n\n // Start at root if path is absolute\n if (path[0] === \"\")\n return this.root.lookup(path.slice(1), filterTypes);\n\n // Test if the first part matches any nested object, and if so, traverse if path contains more\n var found = this.get(path[0]);\n if (found) {\n if (path.length === 1) {\n if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)\n return found;\n } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))\n return found;\n\n // Otherwise try each nested namespace\n } else\n for (var i = 0; i < this.nestedArray.length; ++i)\n if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))\n return found;\n\n // If there hasn't been a match, try again at the parent\n if (this.parent === null || parentAlreadyChecked)\n return null;\n return this.parent.lookup(path, filterTypes);\n};\n\n/**\n * Looks up the reflection object at the specified path, relative to this namespace.\n * @name NamespaceBase#lookup\n * @function\n * @param {string|string[]} path Path to look up\n * @param {boolean} [parentAlreadyChecked=false] Whether the parent has already been checked\n * @returns {ReflectionObject|null} Looked up object or `null` if none could be found\n * @variation 2\n */\n// lookup(path: string, [parentAlreadyChecked: boolean])\n\n/**\n * Looks up the {@link Type|type} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type\n * @throws {Error} If `path` does not point to a type\n */\nNamespace.prototype.lookupType = function lookupType(path) {\n var found = this.lookup(path, [ Type ]);\n if (!found)\n throw Error(\"no such type: \" + path);\n return found;\n};\n\n/**\n * Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Enum} Looked up enum\n * @throws {Error} If `path` does not point to an enum\n */\nNamespace.prototype.lookupEnum = function lookupEnum(path) {\n var found = this.lookup(path, [ Enum ]);\n if (!found)\n throw Error(\"no such Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Type} Looked up type or enum\n * @throws {Error} If `path` does not point to a type or enum\n */\nNamespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {\n var found = this.lookup(path, [ Type, Enum ]);\n if (!found)\n throw Error(\"no such Type or Enum '\" + path + \"' in \" + this);\n return found;\n};\n\n/**\n * Looks up the {@link Service|service} at the specified path, relative to this namespace.\n * Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.\n * @param {string|string[]} path Path to look up\n * @returns {Service} Looked up service\n * @throws {Error} If `path` does not point to a service\n */\nNamespace.prototype.lookupService = function lookupService(path) {\n var found = this.lookup(path, [ Service ]);\n if (!found)\n throw Error(\"no such Service '\" + path + \"' in \" + this);\n return found;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nNamespace._configure = function(Type_, Service_, Enum_) {\n Type = Type_;\n Service = Service_;\n Enum = Enum_;\n};\n","\"use strict\";\nmodule.exports = ReflectionObject;\n\nReflectionObject.className = \"ReflectionObject\";\n\nvar util = require(\"./util\");\n\nvar Root; // cyclic\n\n/**\n * Constructs a new reflection object instance.\n * @classdesc Base class of all reflection objects.\n * @constructor\n * @param {string} name Object name\n * @param {Object.} [options] Declared options\n * @abstract\n */\nfunction ReflectionObject(name, options) {\n\n if (!util.isString(name))\n throw TypeError(\"name must be a string\");\n\n if (options && !util.isObject(options))\n throw TypeError(\"options must be an object\");\n\n /**\n * Options.\n * @type {Object.|undefined}\n */\n this.options = options; // toJSON\n\n /**\n * Parsed Options.\n * @type {Array.>|undefined}\n */\n this.parsedOptions = null;\n\n /**\n * Unique name within its namespace.\n * @type {string}\n */\n this.name = name;\n\n /**\n * Parent namespace.\n * @type {Namespace|null}\n */\n this.parent = null;\n\n /**\n * Whether already resolved or not.\n * @type {boolean}\n */\n this.resolved = false;\n\n /**\n * Comment text, if any.\n * @type {string|null}\n */\n this.comment = null;\n\n /**\n * Defining file name.\n * @type {string|null}\n */\n this.filename = null;\n}\n\nObject.defineProperties(ReflectionObject.prototype, {\n\n /**\n * Reference to the root namespace.\n * @name ReflectionObject#root\n * @type {Root}\n * @readonly\n */\n root: {\n get: function() {\n var ptr = this;\n while (ptr.parent !== null)\n ptr = ptr.parent;\n return ptr;\n }\n },\n\n /**\n * Full name including leading dot.\n * @name ReflectionObject#fullName\n * @type {string}\n * @readonly\n */\n fullName: {\n get: function() {\n var path = [ this.name ],\n ptr = this.parent;\n while (ptr) {\n path.unshift(ptr.name);\n ptr = ptr.parent;\n }\n return path.join(\".\");\n }\n }\n});\n\n/**\n * Converts this reflection object to its descriptor representation.\n * @returns {Object.} Descriptor\n * @abstract\n */\nReflectionObject.prototype.toJSON = /* istanbul ignore next */ function toJSON() {\n throw Error(); // not implemented, shouldn't happen\n};\n\n/**\n * Called when this object is added to a parent.\n * @param {ReflectionObject} parent Parent added to\n * @returns {undefined}\n */\nReflectionObject.prototype.onAdd = function onAdd(parent) {\n if (this.parent && this.parent !== parent)\n this.parent.remove(this);\n this.parent = parent;\n this.resolved = false;\n var root = parent.root;\n if (root instanceof Root)\n root._handleAdd(this);\n};\n\n/**\n * Called when this object is removed from a parent.\n * @param {ReflectionObject} parent Parent removed from\n * @returns {undefined}\n */\nReflectionObject.prototype.onRemove = function onRemove(parent) {\n var root = parent.root;\n if (root instanceof Root)\n root._handleRemove(this);\n this.parent = null;\n this.resolved = false;\n};\n\n/**\n * Resolves this objects type references.\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.resolve = function resolve() {\n if (this.resolved)\n return this;\n if (this.root instanceof Root)\n this.resolved = true; // only if part of a root\n return this;\n};\n\n/**\n * Gets an option value.\n * @param {string} name Option name\n * @returns {*} Option value or `undefined` if not set\n */\nReflectionObject.prototype.getOption = function getOption(name) {\n if (this.options)\n return this.options[name];\n return undefined;\n};\n\n/**\n * Sets an option.\n * @param {string} name Option name\n * @param {*} value Option value\n * @param {boolean} [ifNotSet] Sets the option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) {\n if (!ifNotSet || !this.options || this.options[name] === undefined)\n (this.options || (this.options = {}))[name] = value;\n return this;\n};\n\n/**\n * Sets a parsed option.\n * @param {string} name parsed Option name\n * @param {*} value Option value\n * @param {string} propName dot '.' delimited full path of property within the option to set. if undefined\\empty, will add a new option with that value\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) {\n if (!this.parsedOptions) {\n this.parsedOptions = [];\n }\n var parsedOptions = this.parsedOptions;\n if (propName) {\n // If setting a sub property of an option then try to merge it\n // with an existing option\n var opt = parsedOptions.find(function (opt) {\n return Object.prototype.hasOwnProperty.call(opt, name);\n });\n if (opt) {\n // If we found an existing option - just merge the property value\n var newValue = opt[name];\n util.setProperty(newValue, propName, value);\n } else {\n // otherwise, create a new option, set it's property and add it to the list\n opt = {};\n opt[name] = util.setProperty({}, propName, value);\n parsedOptions.push(opt);\n }\n } else {\n // Always create a new option when setting the value of the option itself\n var newOpt = {};\n newOpt[name] = value;\n parsedOptions.push(newOpt);\n }\n return this;\n};\n\n/**\n * Sets multiple options.\n * @param {Object.} options Options to set\n * @param {boolean} [ifNotSet] Sets an option only if it isn't currently set\n * @returns {ReflectionObject} `this`\n */\nReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) {\n if (options)\n for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)\n this.setOption(keys[i], options[keys[i]], ifNotSet);\n return this;\n};\n\n/**\n * Converts this instance to its string representation.\n * @returns {string} Class name[, space, full name]\n */\nReflectionObject.prototype.toString = function toString() {\n var className = this.constructor.className,\n fullName = this.fullName;\n if (fullName.length)\n return className + \" \" + fullName;\n return className;\n};\n\n// Sets up cyclic dependencies (called in index-light)\nReflectionObject._configure = function(Root_) {\n Root = Root_;\n};\n","\"use strict\";\nmodule.exports = OneOf;\n\n// extends ReflectionObject\nvar ReflectionObject = require(\"./object\");\n((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = \"OneOf\";\n\nvar Field = require(\"./field\"),\n util = require(\"./util\");\n\n/**\n * Constructs a new oneof instance.\n * @classdesc Reflected oneof.\n * @extends ReflectionObject\n * @constructor\n * @param {string} name Oneof name\n * @param {string[]|Object.} [fieldNames] Field names\n * @param {Object.} [options] Declared options\n * @param {string} [comment] Comment associated with this field\n */\nfunction OneOf(name, fieldNames, options, comment) {\n if (!Array.isArray(fieldNames)) {\n options = fieldNames;\n fieldNames = undefined;\n }\n ReflectionObject.call(this, name, options);\n\n /* istanbul ignore if */\n if (!(fieldNames === undefined || Array.isArray(fieldNames)))\n throw TypeError(\"fieldNames must be an Array\");\n\n /**\n * Field names that belong to this oneof.\n * @type {string[]}\n */\n this.oneof = fieldNames || []; // toJSON, marker\n\n /**\n * Fields that belong to this oneof as an array for iteration.\n * @type {Field[]}\n * @readonly\n */\n this.fieldsArray = []; // declared readonly for conformance, possibly not yet added to parent\n\n /**\n * Comment for this field.\n * @type {string|null}\n */\n this.comment = comment;\n}\n\n/**\n * Oneof descriptor.\n * @interface IOneOf\n * @property {Array.} oneof Oneof field names\n * @property {Object.} [options] Oneof options\n */\n\n/**\n * Constructs a oneof from a oneof descriptor.\n * @param {string} name Oneof name\n * @param {IOneOf} json Oneof descriptor\n * @returns {OneOf} Created oneof\n * @throws {TypeError} If arguments are invalid\n */\nOneOf.fromJSON = function fromJSON(name, json) {\n return new OneOf(name, json.oneof, json.options, json.comment);\n};\n\n/**\n * Converts this oneof to a oneof descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IOneOf} Oneof descriptor\n */\nOneOf.prototype.toJSON = function toJSON(toJSONOptions) {\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , this.options,\n \"oneof\" , this.oneof,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Adds the fields of the specified oneof to the parent if not already done so.\n * @param {OneOf} oneof The oneof\n * @returns {undefined}\n * @inner\n * @ignore\n */\nfunction addFieldsToParent(oneof) {\n if (oneof.parent)\n for (var i = 0; i < oneof.fieldsArray.length; ++i)\n if (!oneof.fieldsArray[i].parent)\n oneof.parent.add(oneof.fieldsArray[i]);\n}\n\n/**\n * Adds a field to this oneof and removes it from its current parent, if any.\n * @param {Field} field Field to add\n * @returns {OneOf} `this`\n */\nOneOf.prototype.add = function add(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n if (field.parent && field.parent !== this.parent)\n field.parent.remove(field);\n this.oneof.push(field.name);\n this.fieldsArray.push(field);\n field.partOf = this; // field.parent remains null\n addFieldsToParent(this);\n return this;\n};\n\n/**\n * Removes a field from this oneof and puts it back to the oneof's parent.\n * @param {Field} field Field to remove\n * @returns {OneOf} `this`\n */\nOneOf.prototype.remove = function remove(field) {\n\n /* istanbul ignore if */\n if (!(field instanceof Field))\n throw TypeError(\"field must be a Field\");\n\n var index = this.fieldsArray.indexOf(field);\n\n /* istanbul ignore if */\n if (index < 0)\n throw Error(field + \" is not a member of \" + this);\n\n this.fieldsArray.splice(index, 1);\n index = this.oneof.indexOf(field.name);\n\n /* istanbul ignore else */\n if (index > -1) // theoretical\n this.oneof.splice(index, 1);\n\n field.partOf = null;\n return this;\n};\n\n/**\n * @override\n */\nOneOf.prototype.onAdd = function onAdd(parent) {\n ReflectionObject.prototype.onAdd.call(this, parent);\n var self = this;\n // Collect present fields\n for (var i = 0; i < this.oneof.length; ++i) {\n var field = parent.get(this.oneof[i]);\n if (field && !field.partOf) {\n field.partOf = self;\n self.fieldsArray.push(field);\n }\n }\n // Add not yet present fields\n addFieldsToParent(this);\n};\n\n/**\n * @override\n */\nOneOf.prototype.onRemove = function onRemove(parent) {\n for (var i = 0, field; i < this.fieldsArray.length; ++i)\n if ((field = this.fieldsArray[i]).parent)\n field.parent.remove(field);\n ReflectionObject.prototype.onRemove.call(this, parent);\n};\n\n/**\n * Decorator function as returned by {@link OneOf.d} (TypeScript).\n * @typedef OneOfDecorator\n * @type {function}\n * @param {Object} prototype Target prototype\n * @param {string} oneofName OneOf name\n * @returns {undefined}\n */\n\n/**\n * OneOf decorator (TypeScript).\n * @function\n * @param {...string} fieldNames Field names\n * @returns {OneOfDecorator} Decorator function\n * @template T extends string\n */\nOneOf.d = function decorateOneOf() {\n var fieldNames = new Array(arguments.length),\n index = 0;\n while (index < arguments.length)\n fieldNames[index] = arguments[index++];\n return function oneOfDecorator(prototype, oneofName) {\n util.decorateType(prototype.constructor)\n .add(new OneOf(oneofName, fieldNames));\n Object.defineProperty(prototype, oneofName, {\n get: util.oneOfGetter(fieldNames),\n set: util.oneOfSetter(fieldNames)\n });\n };\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Root;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = \"Root\";\n\nvar Field = require(\"./field\"),\n Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n util = require(\"./util\");\n\nvar Type, // cyclic\n parse, // might be excluded\n common; // \"\n\n/**\n * Constructs a new root namespace instance.\n * @classdesc Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together.\n * @extends NamespaceBase\n * @constructor\n * @param {Object.} [options] Top level options\n */\nfunction Root(options) {\n Namespace.call(this, \"\", options);\n\n /**\n * Deferred extension fields.\n * @type {Field[]}\n */\n this.deferred = [];\n\n /**\n * Resolved file names of loaded files.\n * @type {string[]}\n */\n this.files = [];\n}\n\n/**\n * Loads a namespace descriptor into a root namespace.\n * @param {INamespace} json Nameespace descriptor\n * @param {Root} [root] Root namespace, defaults to create a new one if omitted\n * @returns {Root} Root namespace\n */\nRoot.fromJSON = function fromJSON(json, root) {\n if (!root)\n root = new Root();\n if (json.options)\n root.setOptions(json.options);\n return root.addJSON(json.nested);\n};\n\n/**\n * Resolves the path of an imported file, relative to the importing origin.\n * This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.\n * @function\n * @param {string} origin The file name of the importing file\n * @param {string} target The file name being imported\n * @returns {string|null} Resolved path to `target` or `null` to skip the file\n */\nRoot.prototype.resolvePath = util.path.resolve;\n\n/**\n * Fetch content from file path or url\n * This method exists so you can override it with your own logic.\n * @function\n * @param {string} path File path or url\n * @param {FetchCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.fetch = util.fetch;\n\n// A symbol-like function to safely signal synchronous loading\n/* istanbul ignore next */\nfunction SYNC() {} // eslint-disable-line no-empty-function\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} options Parse options\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n */\nRoot.prototype.load = function load(filename, options, callback) {\n if (typeof options === \"function\") {\n callback = options;\n options = undefined;\n }\n var self = this;\n if (!callback)\n return util.asPromise(load, self, filename, options);\n\n var sync = callback === SYNC; // undocumented\n\n // Finishes loading by calling the callback (exactly once)\n function finish(err, root) {\n /* istanbul ignore if */\n if (!callback)\n return;\n var cb = callback;\n callback = null;\n if (sync)\n throw err;\n cb(err, root);\n }\n\n // Bundled definition existence checking\n function getBundledFileName(filename) {\n var idx = filename.lastIndexOf(\"google/protobuf/\");\n if (idx > -1) {\n var altname = filename.substring(idx);\n if (altname in common) return altname;\n }\n return null;\n }\n\n // Processes a single file\n function process(filename, source) {\n try {\n if (util.isString(source) && source.charAt(0) === \"{\")\n source = JSON.parse(source);\n if (!util.isString(source))\n self.setOptions(source.options).addJSON(source.nested);\n else {\n parse.filename = filename;\n var parsed = parse(source, self, options),\n resolved,\n i = 0;\n if (parsed.imports)\n for (; i < parsed.imports.length; ++i)\n if (resolved = getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i]))\n fetch(resolved);\n if (parsed.weakImports)\n for (i = 0; i < parsed.weakImports.length; ++i)\n if (resolved = getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i]))\n fetch(resolved, true);\n }\n } catch (err) {\n finish(err);\n }\n if (!sync && !queued)\n finish(null, self); // only once anyway\n }\n\n // Fetches a single file\n function fetch(filename, weak) {\n\n // Skip if already loaded / attempted\n if (self.files.indexOf(filename) > -1)\n return;\n self.files.push(filename);\n\n // Shortcut bundled definitions\n if (filename in common) {\n if (sync)\n process(filename, common[filename]);\n else {\n ++queued;\n setTimeout(function() {\n --queued;\n process(filename, common[filename]);\n });\n }\n return;\n }\n\n // Otherwise fetch from disk or network\n if (sync) {\n var source;\n try {\n source = util.fs.readFileSync(filename).toString(\"utf8\");\n } catch (err) {\n if (!weak)\n finish(err);\n return;\n }\n process(filename, source);\n } else {\n ++queued;\n self.fetch(filename, function(err, source) {\n --queued;\n /* istanbul ignore if */\n if (!callback)\n return; // terminated meanwhile\n if (err) {\n /* istanbul ignore else */\n if (!weak)\n finish(err);\n else if (!queued) // can't be covered reliably\n finish(null, self);\n return;\n }\n process(filename, source);\n });\n }\n }\n var queued = 0;\n\n // Assembling the root namespace doesn't require working type\n // references anymore, so we can load everything in parallel\n if (util.isString(filename))\n filename = [ filename ];\n for (var i = 0, resolved; i < filename.length; ++i)\n if (resolved = self.resolvePath(\"\", filename[i]))\n fetch(resolved);\n\n if (sync)\n return self;\n if (!queued)\n finish(null, self);\n return undefined;\n};\n// function load(filename:string, options:IParseOptions, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {LoadCallback} callback Callback function\n * @returns {undefined}\n * @variation 2\n */\n// function load(filename:string, callback:LoadCallback):undefined\n\n/**\n * Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.\n * @function Root#load\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Promise} Promise\n * @variation 3\n */\n// function load(filename:string, [options:IParseOptions]):Promise\n\n/**\n * Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).\n * @function Root#loadSync\n * @param {string|string[]} filename Names of one or multiple files to load\n * @param {IParseOptions} [options] Parse options. Defaults to {@link parse.defaults} when omitted.\n * @returns {Root} Root namespace\n * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid\n */\nRoot.prototype.loadSync = function loadSync(filename, options) {\n if (!util.isNode)\n throw Error(\"not supported\");\n return this.load(filename, options, SYNC);\n};\n\n/**\n * @override\n */\nRoot.prototype.resolveAll = function resolveAll() {\n if (this.deferred.length)\n throw Error(\"unresolvable extensions: \" + this.deferred.map(function(field) {\n return \"'extend \" + field.extend + \"' in \" + field.parent.fullName;\n }).join(\", \"));\n return Namespace.prototype.resolveAll.call(this);\n};\n\n// only uppercased (and thus conflict-free) children are exposed, see below\nvar exposeRe = /^[A-Z]/;\n\n/**\n * Handles a deferred declaring extension field by creating a sister field to represent it within its extended type.\n * @param {Root} root Root instance\n * @param {Field} field Declaring extension field witin the declaring type\n * @returns {boolean} `true` if successfully added to the extended type, `false` otherwise\n * @inner\n * @ignore\n */\nfunction tryHandleExtension(root, field) {\n var extendedType = field.parent.lookup(field.extend);\n if (extendedType) {\n var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options);\n sisterField.declaringField = field;\n field.extensionField = sisterField;\n extendedType.add(sisterField);\n return true;\n }\n return false;\n}\n\n/**\n * Called when any object is added to this root or its sub-namespaces.\n * @param {ReflectionObject} object Object added\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleAdd = function _handleAdd(object) {\n if (object instanceof Field) {\n\n if (/* an extension field (implies not part of a oneof) */ object.extend !== undefined && /* not already handled */ !object.extensionField)\n if (!tryHandleExtension(this, object))\n this.deferred.push(object);\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n object.parent[object.name] = object.values; // expose enum values as property of its parent\n\n } else if (!(object instanceof OneOf)) /* everything else is a namespace */ {\n\n if (object instanceof Type) // Try to handle any deferred extensions\n for (var i = 0; i < this.deferred.length;)\n if (tryHandleExtension(this, this.deferred[i]))\n this.deferred.splice(i, 1);\n else\n ++i;\n for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) // recurse into the namespace\n this._handleAdd(object._nestedArray[j]);\n if (exposeRe.test(object.name))\n object.parent[object.name] = object; // expose namespace as property of its parent\n }\n\n // The above also adds uppercased (and thus conflict-free) nested types, services and enums as\n // properties of namespaces just like static code does. This allows using a .d.ts generated for\n // a static module with reflection-based solutions where the condition is met.\n};\n\n/**\n * Called when any object is removed from this root or its sub-namespaces.\n * @param {ReflectionObject} object Object removed\n * @returns {undefined}\n * @private\n */\nRoot.prototype._handleRemove = function _handleRemove(object) {\n if (object instanceof Field) {\n\n if (/* an extension field */ object.extend !== undefined) {\n if (/* already handled */ object.extensionField) { // remove its sister field\n object.extensionField.parent.remove(object.extensionField);\n object.extensionField = null;\n } else { // cancel the extension\n var index = this.deferred.indexOf(object);\n /* istanbul ignore else */\n if (index > -1)\n this.deferred.splice(index, 1);\n }\n }\n\n } else if (object instanceof Enum) {\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose enum values\n\n } else if (object instanceof Namespace) {\n\n for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) // recurse into the namespace\n this._handleRemove(object._nestedArray[i]);\n\n if (exposeRe.test(object.name))\n delete object.parent[object.name]; // unexpose namespaces\n\n }\n};\n\n// Sets up cyclic dependencies (called in index-light)\nRoot._configure = function(Type_, parse_, common_) {\n Type = Type_;\n parse = parse_;\n common = common_;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = Service;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = \"Service\";\n\nvar Method = require(\"./method\"),\n util = require(\"./util\"),\n rpc = require(\"./rpc\");\n\n/**\n * Constructs a new service instance.\n * @classdesc Reflected service.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Service name\n * @param {Object.} [options] Service options\n * @throws {TypeError} If arguments are invalid\n */\nfunction Service(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Service methods.\n * @type {Object.}\n */\n this.methods = {}; // toJSON, marker\n\n /**\n * Cached methods as an array.\n * @type {Method[]|null}\n * @private\n */\n this._methodsArray = null;\n}\n\n/**\n * Service descriptor.\n * @interface IService\n * @extends INamespace\n * @property {Object.} methods Method descriptors\n */\n\n/**\n * Constructs a service from a service descriptor.\n * @param {string} name Service name\n * @param {IService} json Service descriptor\n * @returns {Service} Created service\n * @throws {TypeError} If arguments are invalid\n */\nService.fromJSON = function fromJSON(name, json) {\n var service = new Service(name, json.options);\n /* istanbul ignore else */\n if (json.methods)\n for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)\n service.add(Method.fromJSON(names[i], json.methods[names[i]]));\n if (json.nested)\n service.addJSON(json.nested);\n service.comment = json.comment;\n return service;\n};\n\n/**\n * Converts this service to a service descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IService} Service descriptor\n */\nService.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"methods\" , Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {},\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * Methods of this service as an array for iteration.\n * @name Service#methodsArray\n * @type {Method[]}\n * @readonly\n */\nObject.defineProperty(Service.prototype, \"methodsArray\", {\n get: function() {\n return this._methodsArray || (this._methodsArray = util.toArray(this.methods));\n }\n});\n\nfunction clearCache(service) {\n service._methodsArray = null;\n return service;\n}\n\n/**\n * @override\n */\nService.prototype.get = function get(name) {\n return this.methods[name]\n || Namespace.prototype.get.call(this, name);\n};\n\n/**\n * @override\n */\nService.prototype.resolveAll = function resolveAll() {\n var methods = this.methodsArray;\n for (var i = 0; i < methods.length; ++i)\n methods[i].resolve();\n return Namespace.prototype.resolve.call(this);\n};\n\n/**\n * @override\n */\nService.prototype.add = function add(object) {\n\n /* istanbul ignore if */\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Method) {\n this.methods[object.name] = object;\n object.parent = this;\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * @override\n */\nService.prototype.remove = function remove(object) {\n if (object instanceof Method) {\n\n /* istanbul ignore if */\n if (this.methods[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.methods[object.name];\n object.parent = null;\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Creates a runtime service using the specified rpc implementation.\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n * @returns {rpc.Service} RPC service. Useful where requests and/or responses are streamed.\n */\nService.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {\n var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);\n for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) {\n var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\\w_]/g, \"\");\n rpcService[methodName] = util.codegen([\"r\",\"c\"], util.isReserved(methodName) ? methodName + \"_\" : methodName)(\"return this.rpcCall(m,q,s,r,c)\")({\n m: method,\n q: method.resolvedRequestType.ctor,\n s: method.resolvedResponseType.ctor\n });\n }\n return rpcService;\n};\n","\"use strict\";\nmodule.exports = Type;\n\n// extends Namespace\nvar Namespace = require(\"./namespace\");\n((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = \"Type\";\n\nvar Enum = require(\"./enum\"),\n OneOf = require(\"./oneof\"),\n Field = require(\"./field\"),\n MapField = require(\"./mapfield\"),\n Service = require(\"./service\"),\n Message = require(\"./message\"),\n Reader = require(\"./reader\"),\n Writer = require(\"./writer\"),\n util = require(\"./util\"),\n encoder = require(\"./encoder\"),\n decoder = require(\"./decoder\"),\n verifier = require(\"./verifier\"),\n converter = require(\"./converter\"),\n wrappers = require(\"./wrappers\");\n\n/**\n * Constructs a new reflected message type instance.\n * @classdesc Reflected message type.\n * @extends NamespaceBase\n * @constructor\n * @param {string} name Message name\n * @param {Object.} [options] Declared options\n */\nfunction Type(name, options) {\n Namespace.call(this, name, options);\n\n /**\n * Message fields.\n * @type {Object.}\n */\n this.fields = {}; // toJSON, marker\n\n /**\n * Oneofs declared within this namespace, if any.\n * @type {Object.}\n */\n this.oneofs = undefined; // toJSON\n\n /**\n * Extension ranges, if any.\n * @type {number[][]}\n */\n this.extensions = undefined; // toJSON\n\n /**\n * Reserved ranges, if any.\n * @type {Array.}\n */\n this.reserved = undefined; // toJSON\n\n /*?\n * Whether this type is a legacy group.\n * @type {boolean|undefined}\n */\n this.group = undefined; // toJSON\n\n /**\n * Cached fields by id.\n * @type {Object.|null}\n * @private\n */\n this._fieldsById = null;\n\n /**\n * Cached fields as an array.\n * @type {Field[]|null}\n * @private\n */\n this._fieldsArray = null;\n\n /**\n * Cached oneofs as an array.\n * @type {OneOf[]|null}\n * @private\n */\n this._oneofsArray = null;\n\n /**\n * Cached constructor.\n * @type {Constructor<{}>}\n * @private\n */\n this._ctor = null;\n}\n\nObject.defineProperties(Type.prototype, {\n\n /**\n * Message fields by id.\n * @name Type#fieldsById\n * @type {Object.}\n * @readonly\n */\n fieldsById: {\n get: function() {\n\n /* istanbul ignore if */\n if (this._fieldsById)\n return this._fieldsById;\n\n this._fieldsById = {};\n for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {\n var field = this.fields[names[i]],\n id = field.id;\n\n /* istanbul ignore if */\n if (this._fieldsById[id])\n throw Error(\"duplicate id \" + id + \" in \" + this);\n\n this._fieldsById[id] = field;\n }\n return this._fieldsById;\n }\n },\n\n /**\n * Fields of this message as an array for iteration.\n * @name Type#fieldsArray\n * @type {Field[]}\n * @readonly\n */\n fieldsArray: {\n get: function() {\n return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));\n }\n },\n\n /**\n * Oneofs of this message as an array for iteration.\n * @name Type#oneofsArray\n * @type {OneOf[]}\n * @readonly\n */\n oneofsArray: {\n get: function() {\n return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));\n }\n },\n\n /**\n * The registered constructor, if any registered, otherwise a generic constructor.\n * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.\n * @name Type#ctor\n * @type {Constructor<{}>}\n */\n ctor: {\n get: function() {\n return this._ctor || (this.ctor = Type.generateConstructor(this)());\n },\n set: function(ctor) {\n\n // Ensure proper prototype\n var prototype = ctor.prototype;\n if (!(prototype instanceof Message)) {\n (ctor.prototype = new Message()).constructor = ctor;\n util.merge(ctor.prototype, prototype);\n }\n\n // Classes and messages reference their reflected type\n ctor.$type = ctor.prototype.$type = this;\n\n // Mix in static methods\n util.merge(ctor, Message, true);\n\n this._ctor = ctor;\n\n // Messages have non-enumerable default values on their prototype\n var i = 0;\n for (; i < /* initializes */ this.fieldsArray.length; ++i)\n this._fieldsArray[i].resolve(); // ensures a proper value\n\n // Messages have non-enumerable getters and setters for each virtual oneof field\n var ctorProperties = {};\n for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i)\n ctorProperties[this._oneofsArray[i].resolve().name] = {\n get: util.oneOfGetter(this._oneofsArray[i].oneof),\n set: util.oneOfSetter(this._oneofsArray[i].oneof)\n };\n if (i)\n Object.defineProperties(ctor.prototype, ctorProperties);\n }\n }\n});\n\n/**\n * Generates a constructor function for the specified type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nType.generateConstructor = function generateConstructor(mtype) {\n /* eslint-disable no-unexpected-multiline */\n var gen = util.codegen([\"p\"], mtype.name);\n // explicitly initialize mutable object/array fields so that these aren't just inherited from the prototype\n for (var i = 0, field; i < mtype.fieldsArray.length; ++i)\n if ((field = mtype._fieldsArray[i]).map) gen\n (\"this%s={}\", util.safeProp(field.name));\n else if (field.repeated) gen\n (\"this%s=[]\", util.safeProp(field.name));\n return gen\n (\"if(p)for(var ks=Object.keys(p),i=0;i} [oneofs] Oneof descriptors\n * @property {Object.} fields Field descriptors\n * @property {number[][]} [extensions] Extension ranges\n * @property {number[][]} [reserved] Reserved ranges\n * @property {boolean} [group=false] Whether a legacy group or not\n */\n\n/**\n * Creates a message type from a message type descriptor.\n * @param {string} name Message name\n * @param {IType} json Message type descriptor\n * @returns {Type} Created message type\n */\nType.fromJSON = function fromJSON(name, json) {\n var type = new Type(name, json.options);\n type.extensions = json.extensions;\n type.reserved = json.reserved;\n var names = Object.keys(json.fields),\n i = 0;\n for (; i < names.length; ++i)\n type.add(\n ( typeof json.fields[names[i]].keyType !== \"undefined\"\n ? MapField.fromJSON\n : Field.fromJSON )(names[i], json.fields[names[i]])\n );\n if (json.oneofs)\n for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)\n type.add(OneOf.fromJSON(names[i], json.oneofs[names[i]]));\n if (json.nested)\n for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {\n var nested = json.nested[names[i]];\n type.add( // most to least likely\n ( nested.id !== undefined\n ? Field.fromJSON\n : nested.fields !== undefined\n ? Type.fromJSON\n : nested.values !== undefined\n ? Enum.fromJSON\n : nested.methods !== undefined\n ? Service.fromJSON\n : Namespace.fromJSON )(names[i], nested)\n );\n }\n if (json.extensions && json.extensions.length)\n type.extensions = json.extensions;\n if (json.reserved && json.reserved.length)\n type.reserved = json.reserved;\n if (json.group)\n type.group = true;\n if (json.comment)\n type.comment = json.comment;\n return type;\n};\n\n/**\n * Converts this message type to a message type descriptor.\n * @param {IToJSONOptions} [toJSONOptions] JSON conversion options\n * @returns {IType} Message type descriptor\n */\nType.prototype.toJSON = function toJSON(toJSONOptions) {\n var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);\n var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;\n return util.toObject([\n \"options\" , inherited && inherited.options || undefined,\n \"oneofs\" , Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),\n \"fields\" , Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) { return !obj.declaringField; }), toJSONOptions) || {},\n \"extensions\" , this.extensions && this.extensions.length ? this.extensions : undefined,\n \"reserved\" , this.reserved && this.reserved.length ? this.reserved : undefined,\n \"group\" , this.group || undefined,\n \"nested\" , inherited && inherited.nested || undefined,\n \"comment\" , keepComments ? this.comment : undefined\n ]);\n};\n\n/**\n * @override\n */\nType.prototype.resolveAll = function resolveAll() {\n var fields = this.fieldsArray, i = 0;\n while (i < fields.length)\n fields[i++].resolve();\n var oneofs = this.oneofsArray; i = 0;\n while (i < oneofs.length)\n oneofs[i++].resolve();\n return Namespace.prototype.resolveAll.call(this);\n};\n\n/**\n * @override\n */\nType.prototype.get = function get(name) {\n return this.fields[name]\n || this.oneofs && this.oneofs[name]\n || this.nested && this.nested[name]\n || null;\n};\n\n/**\n * Adds a nested object to this type.\n * @param {ReflectionObject} object Nested object to add\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id\n */\nType.prototype.add = function add(object) {\n\n if (this.get(object.name))\n throw Error(\"duplicate name '\" + object.name + \"' in \" + this);\n\n if (object instanceof Field && object.extend === undefined) {\n // NOTE: Extension fields aren't actual fields on the declaring type, but nested objects.\n // The root object takes care of adding distinct sister-fields to the respective extended\n // type instead.\n\n // avoids calling the getter if not absolutely necessary because it's called quite frequently\n if (this._fieldsById ? /* istanbul ignore next */ this._fieldsById[object.id] : this.fieldsById[object.id])\n throw Error(\"duplicate id \" + object.id + \" in \" + this);\n if (this.isReservedId(object.id))\n throw Error(\"id \" + object.id + \" is reserved in \" + this);\n if (this.isReservedName(object.name))\n throw Error(\"name '\" + object.name + \"' is reserved in \" + this);\n\n if (object.parent)\n object.parent.remove(object);\n this.fields[object.name] = object;\n object.message = this;\n object.onAdd(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n if (!this.oneofs)\n this.oneofs = {};\n this.oneofs[object.name] = object;\n object.onAdd(this);\n return clearCache(this);\n }\n return Namespace.prototype.add.call(this, object);\n};\n\n/**\n * Removes a nested object from this type.\n * @param {ReflectionObject} object Nested object to remove\n * @returns {Type} `this`\n * @throws {TypeError} If arguments are invalid\n * @throws {Error} If `object` is not a member of this type\n */\nType.prototype.remove = function remove(object) {\n if (object instanceof Field && object.extend === undefined) {\n // See Type#add for the reason why extension fields are excluded here.\n\n /* istanbul ignore if */\n if (!this.fields || this.fields[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.fields[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n if (object instanceof OneOf) {\n\n /* istanbul ignore if */\n if (!this.oneofs || this.oneofs[object.name] !== object)\n throw Error(object + \" is not a member of \" + this);\n\n delete this.oneofs[object.name];\n object.parent = null;\n object.onRemove(this);\n return clearCache(this);\n }\n return Namespace.prototype.remove.call(this, object);\n};\n\n/**\n * Tests if the specified id is reserved.\n * @param {number} id Id to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedId = function isReservedId(id) {\n return Namespace.isReservedId(this.reserved, id);\n};\n\n/**\n * Tests if the specified name is reserved.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nType.prototype.isReservedName = function isReservedName(name) {\n return Namespace.isReservedName(this.reserved, name);\n};\n\n/**\n * Creates a new message of this type using the specified properties.\n * @param {Object.} [properties] Properties to set\n * @returns {Message<{}>} Message instance\n */\nType.prototype.create = function create(properties) {\n return new this.ctor(properties);\n};\n\n/**\n * Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.\n * @returns {Type} `this`\n */\nType.prototype.setup = function setup() {\n // Sets up everything at once so that the prototype chain does not have to be re-evaluated\n // multiple times (V8, soft-deopt prototype-check).\n\n var fullName = this.fullName,\n types = [];\n for (var i = 0; i < /* initializes */ this.fieldsArray.length; ++i)\n types.push(this._fieldsArray[i].resolve().resolvedType);\n\n // Replace setup methods with type-specific generated functions\n this.encode = encoder(this)({\n Writer : Writer,\n types : types,\n util : util\n });\n this.decode = decoder(this)({\n Reader : Reader,\n types : types,\n util : util\n });\n this.verify = verifier(this)({\n types : types,\n util : util\n });\n this.fromObject = converter.fromObject(this)({\n types : types,\n util : util\n });\n this.toObject = converter.toObject(this)({\n types : types,\n util : util\n });\n\n // Inject custom wrappers for common types\n var wrapper = wrappers[fullName];\n if (wrapper) {\n var originalThis = Object.create(this);\n // if (wrapper.fromObject) {\n originalThis.fromObject = this.fromObject;\n this.fromObject = wrapper.fromObject.bind(originalThis);\n // }\n // if (wrapper.toObject) {\n originalThis.toObject = this.toObject;\n this.toObject = wrapper.toObject.bind(originalThis);\n // }\n }\n\n return this;\n};\n\n/**\n * Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encode = function encode_setup(message, writer) {\n return this.setup().encode(message, writer); // overrides this method\n};\n\n/**\n * Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.\n * @param {Message<{}>|Object.} message Message instance or plain object\n * @param {Writer} [writer] Writer to encode to\n * @returns {Writer} writer\n */\nType.prototype.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();\n};\n\n/**\n * Decodes a message of this type.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Length of the message, if known beforehand\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError<{}>} If required fields are missing\n */\nType.prototype.decode = function decode_setup(reader, length) {\n return this.setup().decode(reader, length); // overrides this method\n};\n\n/**\n * Decodes a message of this type preceeded by its byte length as a varint.\n * @param {Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Message<{}>} Decoded message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {util.ProtocolError} If required fields are missing\n */\nType.prototype.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof Reader))\n reader = Reader.create(reader);\n return this.decode(reader, reader.uint32());\n};\n\n/**\n * Verifies that field values are valid and that required fields are present.\n * @param {Object.} message Plain object to verify\n * @returns {null|string} `null` if valid, otherwise the reason why it is not\n */\nType.prototype.verify = function verify_setup(message) {\n return this.setup().verify(message); // overrides this method\n};\n\n/**\n * Creates a new message of this type from a plain object. Also converts values to their respective internal types.\n * @param {Object.} object Plain object to convert\n * @returns {Message<{}>} Message instance\n */\nType.prototype.fromObject = function fromObject(object) {\n return this.setup().fromObject(object);\n};\n\n/**\n * Conversion options as used by {@link Type#toObject} and {@link Message.toObject}.\n * @interface IConversionOptions\n * @property {Function} [longs] Long conversion type.\n * Valid values are `String` and `Number` (the global types).\n * Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.\n * @property {Function} [enums] Enum value conversion type.\n * Only valid value is `String` (the global type).\n * Defaults to copy the present value, which is the numeric id.\n * @property {Function} [bytes] Bytes value conversion type.\n * Valid values are `Array` and (a base64 encoded) `String` (the global types).\n * Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.\n * @property {boolean} [defaults=false] Also sets default values on the resulting object\n * @property {boolean} [arrays=false] Sets empty arrays for missing repeated fields even if `defaults=false`\n * @property {boolean} [objects=false] Sets empty objects for missing map fields even if `defaults=false`\n * @property {boolean} [oneofs=false] Includes virtual oneof properties set to the present field's name, if any\n * @property {boolean} [json=false] Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings\n */\n\n/**\n * Creates a plain object from a message of this type. Also converts values to other types if specified.\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\nType.prototype.toObject = function toObject(message, options) {\n return this.setup().toObject(message, options);\n};\n\n/**\n * Decorator function as returned by {@link Type.d} (TypeScript).\n * @typedef TypeDecorator\n * @type {function}\n * @param {Constructor} target Target constructor\n * @returns {undefined}\n * @template T extends Message\n */\n\n/**\n * Type decorator (TypeScript).\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {TypeDecorator} Decorator function\n * @template T extends Message\n */\nType.d = function decorateType(typeName) {\n return function typeDecorator(target) {\n util.decorateType(target, typeName);\n };\n};\n","\"use strict\";\n\n/**\n * Common type constants.\n * @namespace\n */\nvar types = exports;\n\nvar util = require(\"./util\");\n\nvar s = [\n \"double\", // 0\n \"float\", // 1\n \"int32\", // 2\n \"uint32\", // 3\n \"sint32\", // 4\n \"fixed32\", // 5\n \"sfixed32\", // 6\n \"int64\", // 7\n \"uint64\", // 8\n \"sint64\", // 9\n \"fixed64\", // 10\n \"sfixed64\", // 11\n \"bool\", // 12\n \"string\", // 13\n \"bytes\" // 14\n];\n\nfunction bake(values, offset) {\n var i = 0, o = {};\n offset |= 0;\n while (i < values.length) o[s[i + offset]] = values[i++];\n return o;\n}\n\n/**\n * Basic type wire types.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n * @property {number} bytes=2 Ldelim wire type\n */\ntypes.basic = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2,\n /* bytes */ 2\n]);\n\n/**\n * Basic type defaults.\n * @type {Object.}\n * @const\n * @property {number} double=0 Double default\n * @property {number} float=0 Float default\n * @property {number} int32=0 Int32 default\n * @property {number} uint32=0 Uint32 default\n * @property {number} sint32=0 Sint32 default\n * @property {number} fixed32=0 Fixed32 default\n * @property {number} sfixed32=0 Sfixed32 default\n * @property {number} int64=0 Int64 default\n * @property {number} uint64=0 Uint64 default\n * @property {number} sint64=0 Sint32 default\n * @property {number} fixed64=0 Fixed64 default\n * @property {number} sfixed64=0 Sfixed64 default\n * @property {boolean} bool=false Bool default\n * @property {string} string=\"\" String default\n * @property {Array.} bytes=Array(0) Bytes default\n * @property {null} message=null Message default\n */\ntypes.defaults = bake([\n /* double */ 0,\n /* float */ 0,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 0,\n /* sfixed32 */ 0,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 0,\n /* sfixed64 */ 0,\n /* bool */ false,\n /* string */ \"\",\n /* bytes */ util.emptyArray,\n /* message */ null\n]);\n\n/**\n * Basic long type wire types.\n * @type {Object.}\n * @const\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n */\ntypes.long = bake([\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1\n], 7);\n\n/**\n * Allowed types for map keys with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n * @property {number} string=2 Ldelim wire type\n */\ntypes.mapKey = bake([\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0,\n /* string */ 2\n], 2);\n\n/**\n * Allowed types for packed repeated fields with their associated wire type.\n * @type {Object.}\n * @const\n * @property {number} double=1 Fixed64 wire type\n * @property {number} float=5 Fixed32 wire type\n * @property {number} int32=0 Varint wire type\n * @property {number} uint32=0 Varint wire type\n * @property {number} sint32=0 Varint wire type\n * @property {number} fixed32=5 Fixed32 wire type\n * @property {number} sfixed32=5 Fixed32 wire type\n * @property {number} int64=0 Varint wire type\n * @property {number} uint64=0 Varint wire type\n * @property {number} sint64=0 Varint wire type\n * @property {number} fixed64=1 Fixed64 wire type\n * @property {number} sfixed64=1 Fixed64 wire type\n * @property {number} bool=0 Varint wire type\n */\ntypes.packed = bake([\n /* double */ 1,\n /* float */ 5,\n /* int32 */ 0,\n /* uint32 */ 0,\n /* sint32 */ 0,\n /* fixed32 */ 5,\n /* sfixed32 */ 5,\n /* int64 */ 0,\n /* uint64 */ 0,\n /* sint64 */ 0,\n /* fixed64 */ 1,\n /* sfixed64 */ 1,\n /* bool */ 0\n]);\n","\"use strict\";\n\n/**\n * Various utility functions.\n * @namespace\n */\nvar util = module.exports = require(\"./util/minimal\");\n\nvar roots = require(\"./roots\");\n\nvar Type, // cyclic\n Enum;\n\nutil.codegen = require(\"@protobufjs/codegen\");\nutil.fetch = require(\"@protobufjs/fetch\");\nutil.path = require(\"@protobufjs/path\");\n\n/**\n * Node's fs module if available.\n * @type {Object.}\n */\nutil.fs = util.inquire(\"fs\");\n\n/**\n * Converts an object's values to an array.\n * @param {Object.} object Object to convert\n * @returns {Array.<*>} Converted array\n */\nutil.toArray = function toArray(object) {\n if (object) {\n var keys = Object.keys(object),\n array = new Array(keys.length),\n index = 0;\n while (index < keys.length)\n array[index] = object[keys[index++]];\n return array;\n }\n return [];\n};\n\n/**\n * Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.\n * @param {Array.<*>} array Array to convert\n * @returns {Object.} Converted object\n */\nutil.toObject = function toObject(array) {\n var object = {},\n index = 0;\n while (index < array.length) {\n var key = array[index++],\n val = array[index++];\n if (val !== undefined)\n object[key] = val;\n }\n return object;\n};\n\nvar safePropBackslashRe = /\\\\/g,\n safePropQuoteRe = /\"/g;\n\n/**\n * Tests whether the specified name is a reserved word in JS.\n * @param {string} name Name to test\n * @returns {boolean} `true` if reserved, otherwise `false`\n */\nutil.isReserved = function isReserved(name) {\n return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);\n};\n\n/**\n * Returns a safe property accessor for the specified property name.\n * @param {string} prop Property name\n * @returns {string} Safe accessor\n */\nutil.safeProp = function safeProp(prop) {\n if (!/^[$\\w_]+$/.test(prop) || util.isReserved(prop))\n return \"[\\\"\" + prop.replace(safePropBackslashRe, \"\\\\\\\\\").replace(safePropQuoteRe, \"\\\\\\\"\") + \"\\\"]\";\n return \".\" + prop;\n};\n\n/**\n * Converts the first character of a string to upper case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.ucFirst = function ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar camelCaseRe = /_([a-z])/g;\n\n/**\n * Converts a string to camel case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.camelCase = function camelCase(str) {\n return str.substring(0, 1)\n + str.substring(1)\n .replace(camelCaseRe, function($0, $1) { return $1.toUpperCase(); });\n};\n\n/**\n * Compares reflected fields by id.\n * @param {Field} a First field\n * @param {Field} b Second field\n * @returns {number} Comparison value\n */\nutil.compareFieldsById = function compareFieldsById(a, b) {\n return a.id - b.id;\n};\n\n/**\n * Decorator helper for types (TypeScript).\n * @param {Constructor} ctor Constructor function\n * @param {string} [typeName] Type name, defaults to the constructor's name\n * @returns {Type} Reflected type\n * @template T extends Message\n * @property {Root} root Decorators root\n */\nutil.decorateType = function decorateType(ctor, typeName) {\n\n /* istanbul ignore if */\n if (ctor.$type) {\n if (typeName && ctor.$type.name !== typeName) {\n util.decorateRoot.remove(ctor.$type);\n ctor.$type.name = typeName;\n util.decorateRoot.add(ctor.$type);\n }\n return ctor.$type;\n }\n\n /* istanbul ignore next */\n if (!Type)\n Type = require(\"./type\");\n\n var type = new Type(typeName || ctor.name);\n util.decorateRoot.add(type);\n type.ctor = ctor; // sets up .encode, .decode etc.\n Object.defineProperty(ctor, \"$type\", { value: type, enumerable: false });\n Object.defineProperty(ctor.prototype, \"$type\", { value: type, enumerable: false });\n return type;\n};\n\nvar decorateEnumIndex = 0;\n\n/**\n * Decorator helper for enums (TypeScript).\n * @param {Object} object Enum object\n * @returns {Enum} Reflected enum\n */\nutil.decorateEnum = function decorateEnum(object) {\n\n /* istanbul ignore if */\n if (object.$type)\n return object.$type;\n\n /* istanbul ignore next */\n if (!Enum)\n Enum = require(\"./enum\");\n\n var enm = new Enum(\"Enum\" + decorateEnumIndex++, object);\n util.decorateRoot.add(enm);\n Object.defineProperty(object, \"$type\", { value: enm, enumerable: false });\n return enm;\n};\n\n\n/**\n * Sets the value of a property by property path. If a value already exists, it is turned to an array\n * @param {Object.} dst Destination object\n * @param {string} path dot '.' delimited path of the property to set\n * @param {Object} value the value to set\n * @returns {Object.} Destination object\n */\nutil.setProperty = function setProperty(dst, path, value) {\n function setProp(dst, path, value) {\n var part = path.shift();\n if (path.length > 0) {\n dst[part] = setProp(dst[part] || {}, path, value);\n } else {\n var prevValue = dst[part];\n if (prevValue)\n value = [].concat(prevValue).concat(value);\n dst[part] = value;\n }\n return dst;\n }\n\n if (typeof dst !== \"object\")\n throw TypeError(\"dst must be an object\");\n if (!path)\n throw TypeError(\"path must be specified\");\n\n path = path.split(\".\");\n return setProp(dst, path, value);\n};\n\n/**\n * Decorator root (TypeScript).\n * @name util.decorateRoot\n * @type {Root}\n * @readonly\n */\nObject.defineProperty(util, \"decorateRoot\", {\n get: function() {\n return roots[\"decorated\"] || (roots[\"decorated\"] = new (require(\"./root\"))());\n }\n});\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = verifier;\n\nvar Enum = require(\"./enum\"),\n util = require(\"./util\");\n\nfunction invalid(field, expected) {\n return field.name + \": \" + expected + (field.repeated && expected !== \"array\" ? \"[]\" : field.map && expected !== \"object\" ? \"{k:\"+field.keyType+\"}\" : \"\") + \" expected\";\n}\n\n/**\n * Generates a partial value verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {number} fieldIndex Field index\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyValue(gen, field, fieldIndex, ref) {\n /* eslint-disable no-unexpected-multiline */\n if (field.resolvedType) {\n if (field.resolvedType instanceof Enum) { gen\n (\"switch(%s){\", ref)\n (\"default:\")\n (\"return%j\", invalid(field, \"enum value\"));\n for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen\n (\"case %i:\", field.resolvedType.values[keys[j]]);\n gen\n (\"break\")\n (\"}\");\n } else {\n gen\n (\"{\")\n (\"var e=types[%i].verify(%s);\", fieldIndex, ref)\n (\"if(e)\")\n (\"return%j+e\", field.name + \".\")\n (\"}\");\n }\n } else {\n switch (field.type) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.isInteger(%s))\", ref)\n (\"return%j\", invalid(field, \"integer\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))\", ref, ref, ref, ref)\n (\"return%j\", invalid(field, \"integer|Long\"));\n break;\n case \"float\":\n case \"double\": gen\n (\"if(typeof %s!==\\\"number\\\")\", ref)\n (\"return%j\", invalid(field, \"number\"));\n break;\n case \"bool\": gen\n (\"if(typeof %s!==\\\"boolean\\\")\", ref)\n (\"return%j\", invalid(field, \"boolean\"));\n break;\n case \"string\": gen\n (\"if(!util.isString(%s))\", ref)\n (\"return%j\", invalid(field, \"string\"));\n break;\n case \"bytes\": gen\n (\"if(!(%s&&typeof %s.length===\\\"number\\\"||util.isString(%s)))\", ref, ref, ref)\n (\"return%j\", invalid(field, \"buffer\"));\n break;\n }\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a partial key verifier.\n * @param {Codegen} gen Codegen instance\n * @param {Field} field Reflected field\n * @param {string} ref Variable reference\n * @returns {Codegen} Codegen instance\n * @ignore\n */\nfunction genVerifyKey(gen, field, ref) {\n /* eslint-disable no-unexpected-multiline */\n switch (field.keyType) {\n case \"int32\":\n case \"uint32\":\n case \"sint32\":\n case \"fixed32\":\n case \"sfixed32\": gen\n (\"if(!util.key32Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"integer key\"));\n break;\n case \"int64\":\n case \"uint64\":\n case \"sint64\":\n case \"fixed64\":\n case \"sfixed64\": gen\n (\"if(!util.key64Re.test(%s))\", ref) // see comment above: x is ok, d is not\n (\"return%j\", invalid(field, \"integer|Long key\"));\n break;\n case \"bool\": gen\n (\"if(!util.key2Re.test(%s))\", ref)\n (\"return%j\", invalid(field, \"boolean key\"));\n break;\n }\n return gen;\n /* eslint-enable no-unexpected-multiline */\n}\n\n/**\n * Generates a verifier specific to the specified message type.\n * @param {Type} mtype Message type\n * @returns {Codegen} Codegen instance\n */\nfunction verifier(mtype) {\n /* eslint-disable no-unexpected-multiline */\n\n var gen = util.codegen([\"m\"], mtype.name + \"$verify\")\n (\"if(typeof m!==\\\"object\\\"||m===null)\")\n (\"return%j\", \"object expected\");\n var oneofs = mtype.oneofsArray,\n seenFirstField = {};\n if (oneofs.length) gen\n (\"var p={}\");\n\n for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {\n var field = mtype._fieldsArray[i].resolve(),\n ref = \"m\" + util.safeProp(field.name);\n\n if (field.optional) gen\n (\"if(%s!=null&&m.hasOwnProperty(%j)){\", ref, field.name); // !== undefined && !== null\n\n // map fields\n if (field.map) { gen\n (\"if(!util.isObject(%s))\", ref)\n (\"return%j\", invalid(field, \"object\"))\n (\"var k=Object.keys(%s)\", ref)\n (\"for(var i=0;i}\n * @const\n */\nvar wrappers = exports;\n\nvar Message = require(\"./message\");\n\n/**\n * From object converter part of an {@link IWrapper}.\n * @typedef WrapperFromObjectConverter\n * @type {function}\n * @param {Object.} object Plain object\n * @returns {Message<{}>} Message instance\n * @this Type\n */\n\n/**\n * To object converter part of an {@link IWrapper}.\n * @typedef WrapperToObjectConverter\n * @type {function}\n * @param {Message<{}>} message Message instance\n * @param {IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n * @this Type\n */\n\n/**\n * Common type wrapper part of {@link wrappers}.\n * @interface IWrapper\n * @property {WrapperFromObjectConverter} [fromObject] From object converter\n * @property {WrapperToObjectConverter} [toObject] To object converter\n */\n\n// Custom wrapper for Any\nwrappers[\".google.protobuf.Any\"] = {\n\n fromObject: function(object) {\n\n // unwrap value type if mapped\n if (object && object[\"@type\"]) {\n // Only use fully qualified type name after the last '/'\n var name = object[\"@type\"].substring(object[\"@type\"].lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type) {\n // type_url does not accept leading \".\"\n var type_url = object[\"@type\"].charAt(0) === \".\" ?\n object[\"@type\"].substr(1) : object[\"@type\"];\n // type_url prefix is optional, but path seperator is required\n if (type_url.indexOf(\"/\") === -1) {\n type_url = \"/\" + type_url;\n }\n return this.create({\n type_url: type_url,\n value: type.encode(type.fromObject(object)).finish()\n });\n }\n }\n\n return this.fromObject(object);\n },\n\n toObject: function(message, options) {\n\n // Default prefix\n var googleApi = \"type.googleapis.com/\";\n var prefix = \"\";\n var name = \"\";\n\n // decode value if requested and unmapped\n if (options && options.json && message.type_url && message.value) {\n // Only use fully qualified type name after the last '/'\n name = message.type_url.substring(message.type_url.lastIndexOf(\"/\") + 1);\n // Separate the prefix used\n prefix = message.type_url.substring(0, message.type_url.lastIndexOf(\"/\") + 1);\n var type = this.lookup(name);\n /* istanbul ignore else */\n if (type)\n message = type.decode(message.value);\n }\n\n // wrap value if unmapped\n if (!(message instanceof this.ctor) && message instanceof Message) {\n var object = message.$type.toObject(message, options);\n var messageName = message.$type.fullName[0] === \".\" ?\n message.$type.fullName.substr(1) : message.$type.fullName;\n // Default to type.googleapis.com prefix if no prefix is used\n if (prefix === \"\") {\n prefix = googleApi;\n }\n name = prefix + messageName;\n object[\"@type\"] = name;\n return object;\n }\n\n return this.toObject(message, options);\n }\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(714);\n"],"names":["root","factory","exports","module","define","amd","this","fn","ctx","params","Array","arguments","length","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","p","n","charAt","Math","ceil","b64","s64","i","encode","buffer","start","end","t","parts","chunk","j","b","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","undefined","Error","test","codegen","functionParams","functionName","body","Codegen","formatStringOrScope","source","toString","verbose","console","log","scopeKeys","Object","keys","scopeParams","scopeValues","scopeOffset","Function","formatParams","formatOffset","replace","$0","$1","value","Number","floor","JSON","stringify","functionNameOverride","EventEmitter","_listeners","prototype","on","evt","off","listeners","splice","emit","args","fetch","asPromise","fs","inquire","filename","options","callback","xhr","readFile","contents","XMLHttpRequest","binary","onreadystatechange","readyState","status","response","responseText","Uint8Array","overrideMimeType","responseType","open","send","Float32Array","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","moduleName","mod","eval","e","path","isAbsolute","normalize","split","absolute","prefix","shift","originPath","includePath","alreadyNormalized","alloc","size","SIZE","MAX","slab","call","utf8","len","read","write","c1","c2","_errorTimeout","_errorConnectionClosed","Centrifuge","url","_url","_websocket","_sockjs","_isSockjs","_xmlhttprequest","_binary","_methodType","_pushType","_encoder","_decoder","_status","_reconnect","_reconnecting","_transport","_transportName","_transportClosed","_messageId","_clientID","_refreshRequired","_subs","_serverSubs","_lastSeq","_lastGen","_lastOffset","_lastEpoch","_messages","_isBatching","_isSubscribeBatching","_privateChannels","_numRefreshFailed","_refreshTimeout","_pingTimeout","_pongTimeout","_subRefreshTimeouts","_retries","_callbacks","_latency","_latencyStart","_connectData","_token","_xhrID","_xhrs","_dispatchPromise","_protocol","_config","protocol","debug","name","version","websocket","sockjs","xmlhttprequest","minRetry","maxRetry","timeout","ping","pingInterval","pongWaitTimeout","privateChannelPrefix","onTransportClose","sockjsServer","sockjsTimeout","sockjsTransports","refreshEndpoint","refreshHeaders","refreshParams","refreshData","refreshAttempts","refreshInterval","onRefreshFailed","onRefresh","subscribeEndpoint","subscribeHeaders","subscribeParams","subRefreshInterval","onPrivateSubscribe","disableWithCredentials","_configure","token","data","headers","query","_debug","global","ActiveXObject","hasOwnProperty","encodeURIComponent","headerName","withCredentials","setRequestHeader","parsed","parse","error","_log","setTimeout","WebSocket","format","_formatOverride","JsonMethodType","JsonPushType","JsonEncoder","JsonDecoder","configuration","extend","startsWith","indexOf","_setFormat","SockJS","newStatus","interval","backoff","xhrID","abort","reconnect","id","_stopPing","callbacks","clearTimeout","errback","_createErrorObject","channel","sub","_isSuccess","_triggerUnsubscribe","_recover","_shouldResubscribe","_setSubscribing","_setUnsubscribed","_abortInflightXHRs","_clearSubRefreshTimeout","transport","OPEN","commands","_isTransportOpen","command","encodeCommands","sockjsOptions","transports","server","_websocketSupported","subProtocol","_getSubProtocol","binaryType","onopen","onheartbeat","_restartPing","msg","subs","hasSubs","recoverable","seq","gen","epoch","Date","_call","then","resolveCtx","_connectResponse","decodeCommandResult","CONNECT","result","next","rejectCtx","code","_disconnect","onerror","onclose","closeEvent","reason","needReconnect","advice","event","_getRetryInterval","_refresh","_connect","onmessage","_dataReceived","_rpc","method","RPC","_methodCall","SEND","isConnected","_transportSend","since","limit","reverse","resultCB","PUBLISH","_getHistoryParams","HISTORY","publications","PRESENCE","presence","PRESENCE_STATS","num_users","num_clients","replies","decodeReplies","finishDispatch","_dispatchSynchronized","_dispatchReply","reply","_handleReply","_handlePush","_addMessage","_registerCall","_setStatus","_setupTransport","shouldReconnect","_isDisconnected","_clearConnectedState","close","_refreshFailed","clientID","_newXHRID","cb","resp","jitter","random","max","REFRESH","_refreshResponse","_refreshError","_ajax","expires","client","_getTTLMilliseconds","ttl","channelsData","channels","channelData","SUB_REFRESH","_getSub","_subRefreshResponse","_subRefreshError","subRefreshTimeout","_subRefresh","isResubscribe","SUBSCRIBE","startSubscribeBatching","_subscribe","stopSubscribeBatching","recover","_needRecover","_getLastSeq","_getLastGen","_getLastOffset","_getLastEpoch","_subscribeResponse","_subscribeError","_setNew","UNSUBSCRIBE","min","isRecover","wasReconnecting","_resetRetry","getTime","startBatching","stopBatching","_startPing","latency","_processServerSubs","subCtx","_expandSubscribeContext","recovered","pubs","_handlePublication","_isSubscribing","message","_setSubscribeError","positioned","streamPosition","_setSubscribeSuccess","_recoverable","errorExists","info","_isServerSub","leave","unsub","unsubscribe","resubscribe","subscribe","pub","decodePush","type","PUBLICATION","decodePushData","MESSAGE","_handleMessage","JOIN","_handleJoin","LEAVE","_handleLeave","_handleUnsub","_handleSub","messages","PING","_pingResponse","isFunction","_nextMessageId","_isConnected","_ping","_flush","authChannels","batch","_setNeedRecover","events","opts","currentSub","_setEvents","_isUnsubscribed","Subscription","_setSubscribeSince","CentrifugeProtobuf","map","filter","r","methodType","pushType","protobuf","require","proto","Root","fromJSON","methodValues","lookupEnum","values","protobufMethodType","methodSchema","lookupType","protobufPushType","PushSchema","Push","Command","Reply","ProtobufEncoder","writer","Writer","create","assign","finish","encodeDelimited","ProtobufDecoder","reader","Reader","decodeDelimited","_decode","res","centrifuge","_centrifuge","_error","_isResubscribe","_ready","_subscriptionPromise","_noResubscribe","_initializePromise","_promises","_promiseId","errContext","_resolve","_reject","enabled","knownEvents","l","ev","subscribeResult","successContext","_getSubscribeSuccessContext","_getSubscribeErrorContext","noResubscribe","needTrigger","subscribeErrorContext","_unsubscribe","_isError","rej","_nextPromiseId","self","publish","presenceStats","history","lastIndexOf","level","logger","step","a","key","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","addListener","prependListener","prependOnceListener","list","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","converter","Enum","util","genValuePartial_fromObject","field","fieldIndex","prop","resolvedType","repeated","typeDefault","fullName","isUnsigned","genValuePartial_toObject","fromObject","mtype","fields","fieldsArray","safeProp","toObject","sort","compareFieldsById","repeatedFields","mapFields","normalFields","partOf","valuesById","long","low","high","unsigned","toNumber","bytes","arrayDefault","hasKs2","_fieldsArray","group","ref","types","defaults","keyType","basic","packed","rfield","required","missing","wireType","mapKey","genTypePartial","optional","ReflectionObject","constructor","className","Namespace","comment","comments","reserved","json","enm","toJSON","toJSONOptions","keepComments","Boolean","add","isString","isInteger","isReservedId","isReservedName","allow_alias","remove","Field","Type","ruleRe","rule","isObject","toLowerCase","defaultValue","Long","extensionField","declaringField","_packed","getOption","setOption","ifNotSet","resolved","parent","lookupTypeOrEnum","fromNumber","freeze","newBuffer","emptyObject","emptyArray","ctor","d","fieldId","fieldType","fieldRule","decorateType","decorateEnum","fieldName","Type_","build","load","loadSync","encoder","decoder","verifier","OneOf","MapField","Service","Method","Message","wrappers","configure","BufferWriter","BufferReader","rpc","roots","resolvedKeyType","fieldKeyType","fieldValueType","properties","$type","verify","object","requestType","requestStream","responseStream","parsedOptions","resolvedRequestType","resolvedResponseType","arrayToJSON","array","obj","nested","_nestedArray","clearCache","namespace","addJSON","toArray","nestedArray","nestedJson","names","methods","getEnum","prev","setOptions","onAdd","onRemove","isArray","ptr","part","resolveAll","lookup","filterTypes","parentAlreadyChecked","found","lookupService","Service_","Enum_","defineProperties","_handleAdd","_handleRemove","setParsedOption","propName","opt","find","newValue","setProperty","newOpt","Root_","fieldNames","oneof","addFieldsToParent","oneofName","oneOfGetter","oneOfSetter","LongBits","indexOutOfRange","writeLength","create_array","Buffer","isBuffer","readLongVarint","bits","readFixed32_end","readFixed64","_slice","subarray","uint32","int32","sint32","bool","fixed32","sfixed32","float","double","skip","skipType","BufferReader_","merge","int64","uint64","sint64","zzDecode","fixed64","sfixed64","utf8Slice","common","deferred","files","SYNC","resolvePath","sync","getBundledFileName","idx","altname","substring","process","imports","weakImports","queued","weak","readFileSync","isNode","exposeRe","tryHandleExtension","extendedType","sisterField","parse_","common_","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","endedByRPC","_methodsArray","service","inherited","methodsArray","rpcService","methodName","lcFirst","isReserved","q","s","oneofs","extensions","_fieldsById","_oneofsArray","_ctor","fieldsById","oneofsArray","generateConstructor","ctorProperties","setup","wrapper","originalThis","fork","ldelim","typeName","bake","o","safePropBackslashRe","safePropQuoteRe","ucFirst","str","toUpperCase","camelCaseRe","camelCase","decorateRoot","decorateEnumIndex","dst","setProp","prevValue","zero","zzEncode","zeroHash","from","parseInt","fromString","toLong","fromHash","hash","toHash","mask","part0","part1","part2","src","newError","CustomError","captureStackTrace","stack","pool","g","versions","node","window","isFinite","isset","isSet","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","ProtocolError","fieldMap","longs","enums","encoding","allocUnsafe","seenFirstField","invalid","genVerifyKey","genVerifyValue","oneofProp","expected","type_url","substr","Op","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","reset","BufferWriter_","writeStringBuffer","writeBytesBuffer","byteLength","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a02e907e..0e3554fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "centrifuge", - "version": "2.8.0", + "version": "2.8.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -6717,4 +6717,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index e6a372fc..936c9c4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "centrifuge", - "version": "2.8.2", + "version": "2.8.3", "description": "Centrifuge and Centrifugo client for NodeJS and browser", "main": "dist/centrifuge.js", "types": "dist/centrifuge.d.ts", diff --git a/src/centrifuge.js b/src/centrifuge.js index 06d3138f..fcbfc373 100644 --- a/src/centrifuge.js +++ b/src/centrifuge.js @@ -1599,11 +1599,11 @@ export class Centrifuge extends EventEmitter { } else if (type === this._pushType.LEAVE) { const leave = this._decoder.decodePushData(this._pushType.LEAVE, push.data); this._handleLeave(channel, leave); - } else if (type === this._pushType.UNSUB) { - const unsub = this._decoder.decodePushData(this._pushType.UNSUB, push.data); + } else if (type === this._pushType.UNSUBSCRIBE) { + const unsub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleUnsub(channel, unsub); - } else if (type === this._pushType.SUB) { - const sub = this._decoder.decodePushData(this._pushType.SUB, push.data); + } else if (type === this._pushType.SUBSCRIBE) { + const sub = this._decoder.decodePushData(this._pushType.UNSUBSCRIBE, push.data); this._handleSub(channel, sub); } next(); diff --git a/src/protobuf.js b/src/protobuf.js index 97c4f2bd..1be0b2e1 100644 --- a/src/protobuf.js +++ b/src/protobuf.js @@ -1,4 +1,4 @@ -import {Centrifuge} from './centrifuge.js'; +import { Centrifuge } from './centrifuge.js'; const protobuf = require('protobufjs/light'); const proto = protobuf.Root.fromJSON(require('./client.proto.json'));